在尝试保存时,为什么新创建的EF实体抛出ID为null异常?

时间:2010-05-15 03:42:53

标签: c# entity-framework visual-studio-2010

我正在尝试VS2010中包含的实体框架,但是我的数据库/模型从图形界面生成了问题。

当我这样做时:

user = dataset.UserSet.CreateObject();
user.Id = Guid.NewGuid();
dataset.UserSet.AddObject(user);
dataset.SaveChanges();

{“无法将值NULL插入列'Id',表'BarSoc2.dbo.UserSet';列不允许空值.INSERT失败。\ r \ n语句已终止。”}

我插入的表看起来像这样:

-- Creating table 'UserSet'
CREATE TABLE [dbo].[UserSet] (
    [Id] uniqueidentifier  NOT NULL,
    [Name] nvarchar(max)  NOT NULL,
    [Username] nvarchar(max)  NOT NULL,
    [Password] nvarchar(max)  NOT NULL
);
GO

-- Creating primary key on [Id] in table 'UserSet'
ALTER TABLE [dbo].[UserSet]
ADD CONSTRAINT [PK_UserSet]
    PRIMARY KEY CLUSTERED ([Id] ASC);
GO

我是以错误的方式创建对象还是做其他基本错误的事情?

2 个答案:

答案 0 :(得分:7)

在定义为键的字段的模型上,添加以下属性。 此密钥在数据库中未标记为IDENTITY,实体框架提供异常

[Key]
[Display(Name = "Id")]     
[DatabaseGenerated(System.ComponentModel.DataAnnotations.DatabaseGeneratedOption.None)]
public int Id { get; set; }

答案 1 :(得分:3)

您不必手动设置ID属性。保存时应自动设置。我假设您使用的是Entity Framework的标准模板,而不是自我跟踪实体模板或POCO模板。如果是这样,以下几行似乎更合适:

User user = new User();
dataset.AddToUsers(user);
dataset.SaveChanges();