我正在尝试通过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();
}
Contact模型是一个基本实体,具有Id(Guid)和Name(字符串),没有关系或任何东西。这是我的访问规则:
Config.SetServiceOperationAccessRule("*", ServiceOperationRights.All);
Config.SetEntitySetAccessRule("*", EntitySetRights.All);
我无法理解为什么它一直抛出异常,因为Id 不是 null。想法,建议?
答案 0 :(得分:1)
听起来像EF希望数据库生成Id键列的值。
通常你必须选择:
StoreGeneratedPattern
属性设置为none
。StoreGeneratedPattern
属性设置为Identity
。EF版本1不支持第二个选项。您必须在xml编辑器中打开并修改edmx文件才能使其生效(有关详细信息,请参阅此blog entry)。
您所做的是两个选项的混合:您在客户端代码中设置值,但告诉EF StoreGeneratedPattern=Identity
数据库将生成值。
答案 1 :(得分:1)
似乎将 StoreGeneratedPattern 设置为无法在使用Guid作为主键时解决问题 - 我认为EF可以将Guid作为主键处理?