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。想法,建议吗?

WCF数据服务保存数据/实体问题

似乎设置StoreGeneratedPattern为none解决了使用Guid为主键时的问题-我认为EF可以处理Guid为主键?

这听起来像EF期望数据库生成Id键列的值。

一般来说,你有以下选项:

  1. 在客户端生成id值(c#代码),就像你做的那样,并将StoreGeneratedPattern属性设置为none
  2. 在数据库端生成id值,设置StoreGeneratedPattern属性为Identity

第二个选项不支持EF版本1。您必须在xml编辑器中打开并修改edmx文件才能使其工作(有关详细信息,请参阅此博客条目)。

您所做的是两个选项的混合:您在客户端代码中设置值,但通过StoreGeneratedPattern=Identity告诉EF数据库将生成该值