2013-04-16 2 views
2

При вставке базы данных строк с помощью LINQ, 0 (как int) преобразуется в NULL и не отображается в вставной заявлении:LINQ преобразует «0» в NULL в вкладышем

DatabaseCAMAE db = new DatabaseCAMAE(Database.Instance.Connection); 
db.Log = Console.Out; 
camaeprotocol cpr = new camaeprotocol 
{ 
    sid = 0, 
    prrevision = 0, 
    ataction = "Scan created", 
    prdescription = "Scan created", 
    prtimestamp = DateTime.Now, 
    uid = 0 
}; 
db.camaeprotocol.InsertOnSubmit(cpr); 
db.SubmitChanges(); 

Где sid и prrevision являются первичным ключом.
Бревенчатые выходы:

INSERT INTO "main"."camae_protocol" 
    ("at_action", "pr_description", "pr_timestamp", "u_id") 
VALUES (:ataction, :prdescription, :prtimestamp, :uid) 
-- :ataction: Input String (Size = 0; Prec = 0; Scale = 0) [Scan created] 
-- :prdescription: Input String (Size = 0; Prec = 0; Scale = 0) [Scan created] 
-- :prtimestamp: Input DateTime (Size = 0; Prec = 0; Scale = 0) [16.04.2013 07:52:44] 
-- :uid: Input Int32 (Size = 0; Prec = 0; Scale = 0) [0] 
-- Context: SQLite Model: AttributedMetaModel Build: 0.20.0.0 

И возникает исключение (нарушение ограничений), потому что LINQ не пытается вставить 0sid и 0prrevision. Что делать, чтобы исправить это?

+0

Каковы их типы данных? – Ali

+0

Они оба настоящие «int», а не «int?». – yvesonline

+0

Нет, они не настроены на «auto increment» – yvesonline

ответ

3

Из журнала кажется, что поля «sid» и «prrevision» не включены в инструкцию INSERT. Если вы пометили эти поля в своей сущности как составные первичные ключи ([Key] как аннотация или HasKey() свободно), EF не отправит их в вашу базу данных и предположит, что они автогенерированы.

Вы можете сказать, EF не считать их генерироваться автоматически, установив

[DatabaseGenerated(DatabaseGenerationOption.None)] 

на двух ключевых областях.

+0

Вот и все! Спасибо! – yvesonline

Смежные вопросы