2012-01-13 46 views
13

對不起,我的英文。爲什麼EF試圖在ID列中插入NULL?

我正在使用Entity Framework 4.0(Model first)編寫我的項目。 在項目開始時,我面臨着這樣的問題:我試圖插入到數據庫中填充的對象,但我得到一個exeption:

「無法將NULL值插入列‘CATEGORYID’,表'ForumDB.dbo.Categories';列不允許爲null,INSERT失敗,語句已被終止。「

Category usingCategory = new Category("Using Forums", "usingforums", 0); 
    using (Context) 
    { 
     Context.Categories.AddObject(usingCategory); 
     Context.SaveChanges(); 
    } 

我檢查了這個對象,我確信它被填充。

以防萬一:

public Category(string name, string urlName, int index) 
{ 
    CategoryId = Guid.NewGuid(); 
    Name = name; 
    UrlName = urlName; 
    CategoryIndex = index; 
} 

請告訴我是怎麼回事? 感謝您的幫助!

+0

什麼樣的數據類型是你的CategoryId? – Kyle 2012-01-13 18:04:23

+0

@凱爾,guid(uniqueidentifier)。 – 2012-01-13 18:06:08

回答

24

看看這個:https://stackoverflow.com/a/5338384/171703 - 實體框架可能會假設您的CategoryId字段是一個標識,因此將null傳遞給數據庫,期望它爲您填充它。

+1

這很好,但我使用模型優先,但在這個問題中,問題已在代碼優先的範圍內解決。 – 2012-01-13 18:09:44

+0

@KovpaevAlexey在這個問題中被接受的答案是代碼第一,但在這個問題中的具體鏈接答案是模型第一。 – hvd 2012-01-13 18:14:46

+0

@ hvd,這個問題已經解決,當我添加生成ID在DB端。 – 2012-01-13 18:36:05

14

我今天遇到了這個問題,不得不從數據庫重新生成我的EF類。

這樣做之後,我發現,EF補充說:

[DatabaseGenerated(DatabaseGeneratedOption.None)] 
public int Id { get; set; } 

來曾經是在SQL標識列此「ID」字段,但變更爲應用程序分配。

我想,如果你沒有這個屬性EF不會實際發送ID到數據庫(「約定優於配置」)

+1

也適用於我:不需要重新生成類,只需將屬性添加到屬性中即可。 – sluiper 2017-09-27 06:54:24

+0

也爲我工作..非常感謝你 – Steph8 2018-02-06 15:18:19

3

我創造與詮釋ID作爲PK的表,但忘記了設置「Identity Specification」= True

+0

你讓我的一天! – Hari 2017-11-17 04:03:52

相關問題