WCF数据服务保存数据/实体问题
本文关键字:数据 实体 体问题 保存 服务 WCF | 更新日期: 2023-09-27 18:08:53
我试图通过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。想法,建议吗?
似乎设置StoreGeneratedPattern为none解决了使用Guid为主键时的问题-我认为EF可以处理Guid为主键?
这听起来像EF期望数据库生成Id键列的值。
一般来说,你有以下选项:
- 在客户端生成id值(c#代码),就像你做的那样,并将
StoreGeneratedPattern
属性设置为none
。 - 在数据库端生成id值,设置
StoreGeneratedPattern
属性为Identity
。
第二个选项不支持EF版本1。您必须在xml编辑器中打开并修改edmx文件才能使其工作(有关详细信息,请参阅此博客条目)。
您所做的是两个选项的混合:您在客户端代码中设置值,但通过StoreGeneratedPattern=Identity
告诉EF数据库将生成该值