2011-06-06 59 views
1

一段時間嘗試使用WCF數據服務以更新表中的字段時,我無法找出錯誤的原因加上實體框架:WCF數據服務更新的實體錯誤和類型表的主鍵

MydbEntities context = new MydbEntities(new Uri("http://localhost:53051/Services/MydbService.svc")); 
MyEntity entitytoedit = context.MyEntity.FirstOrDefault(); 
entitytoedit.Name = "TheNewName"; 
context.UpdateObject(entitytoedit); 
context.BeginSaveChanges(OnChangesSaved, context); 
... 

錯誤如下:RequestException處理此請求時發生錯誤。

此修復程序是添加一個自動增加的decimal(18, 0)場與標識規範IsIdentity = yes,而不僅僅是一個varchar(20)字段作爲主鍵的主鍵。

請問,有人可以解釋問題的性質:我應該總是使用WCF數據服務自動增量主鍵嗎?如果不是,那麼我究竟在哪裏錯了?

+0

您確定對象已更新並且未再次插入嗎? – 2011-06-06 17:45:12

+0

很確定。至少,autoincremental主鍵字段值與更新之前保持不變。 – rem 2011-06-06 18:02:32

+0

您是否嘗試打開異常詳情?你可以用'[ServiceBehavior(IncludeExceptionDetailsInFaults = true)]'標記你的服務類,或者在配置中使用這個設置。 – 2011-06-06 18:10:28

回答

1

我認爲這是比WCF數據服務更多的實體框架問題。

您可以使用手動設置的主鍵字段,並且必須將StoreGeneratedPattern設置爲None

或者您可以使用AutoIncrement字段作爲主鍵,在這種情況下,您必須將StoreGeneratedPattern設置爲Identity

把這個混合到案件總是會破壞事情。另外,當您進行Model First時,默認情況下主鍵字段的類型爲intStoreGeneratedPattern設置爲Identity,因此僅將類型更改爲decimal是不夠的。