2011-09-19 87 views
1

我想回保存數據通過WCF的數據庫,但我不斷收到:WCF數據服務數據保存/實體問題

Cannot insert the value NULL into column 'Id', table 'ResellerPlatform.dbo.Contacts'; column does not allow nulls. INSERT fails. The statement has been terminated.(System.Data.UpdateException)

同樣的通過情況WebGet在服務端本身:

[WebGet] 
public void AddContact() 
{ 
    var Contact = new Models.ResellerPlatform.Contact 
    { 
     Id = Guid.NewGuid(), 
     Name = "Foo" 
    }; 

    base.CurrentDataSource.AddToContacts(Contact); 
    base.CurrentDataSource.SaveChanges(); 
} 

的接觸模型是一個ID(GUID)和名稱(字符串)一個基本的實體,沒有任何關係或任何東西。這裏是我的訪問規則:

Config.SetServiceOperationAccessRule("*", ServiceOperationRights.All); 
Config.SetEntitySetAccessRule("*", EntitySetRights.All); 

我不明白爲什麼它不斷拋出異常爲ID 空。想法,建議?

+0

你使用的是sql server嗎?它看起來像Id列沒有填充。您可以使用sql profiler來查看發送到sql server的內容。 –

+0

Id如何映射?順便說一句。不應該使用GET操作來修改應用程序中的數據。 –

+0

@rudolf_franek,Ladislav Mrnka是的,我知道。我只是用它來調試,因爲它更容易:-)在SQL分析器的好主意,但我懷疑它會是NULL,任何想法,爲什麼WCF會這樣做? – eth0

回答

1

它似乎設置StoreGeneratedPattern沒有解決問題時使用主鍵Guid - 我認爲EF可以處理Guid的主鍵?

+1

EF 4可以使用StoreGeneratedPattern.Identity來處理GUID,而EF 1則不能。但是你必須在數據庫端生成id值!你已經告訴你不要這樣做,所以你的錯誤。 EF期望值由數據庫設置。看到我的答案。 – Jan

1

這聽起來像EF期待數據庫生成您的ID鍵列的值。

通常你必須選擇:

  1. 產生價值在客戶端(C#代碼)ID作爲你沒有和StoreGeneratedPattern屬性設置爲none
  2. 生成數據庫端的id值並將StoreGeneratedPattern屬性設置爲Identity

第二個選項是不能與EF版本1.支持你要打開和修改EDMX文件的XML編輯器來得到這個工作(見本blog entry瞭解詳細信息)。

你所做的是將兩種選擇混合使用:在客戶端代碼中設置值,但通過StoreGeneratedPattern=Identity告知EF數據庫將生成該值。

+0

Id列僅僅是一個唯一標識符,沒有默認值或任何東西。 http://imgur.com/F09bw – eth0

+0

你檢查了映射嗎? – Jan

+0

如果有幫助:http://i.imgur.com/bnvg1.png – eth0