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

时间:2011-09-19 08:05:52

标签: c# sql wcf c#-4.0 wcf-data-services

我正在尝试通过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。想法,建议?

2 个答案:

答案 0 :(得分:1)

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

通常你必须选择:

  1. 像您一样在客户端生成id值(c#代码),并将StoreGeneratedPattern属性设置为none
  2. 在数据库端生成id值,并将StoreGeneratedPattern属性设置为Identity
  3. EF版本1不支持第二个选项。您必须在xml编辑器中打开并修改edmx文件才能使其生效(有关详细信息,请参阅此blog entry)。

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

答案 1 :(得分:1)

似乎将 StoreGeneratedPattern 设置为无法在使用Guid作为主键时解决问题 - 我认为EF可以将Guid作为主键处理?