我正在尝试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
我是以错误的方式创建对象还是做其他基本错误的事情?
答案 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();