按entity framework创建记录时未插入数据库默认值

我在sqlserver 2008中有一个LoginRecord表,其中包含以下列结构 –

LoginId - int, identity UserId - int LoginDateTime- Allow nulls false,default value getdate() 

我按entity framework6插入新纪录如下─

  db.LoginRecords.Add(new LoginRecord() { UserId = UserId }); db.SaveChanges(); 

但是在LoginDateTime表中,正在插入空值。 它应该是当前的日期时间。

我正在使用数据库第一种方法。

怎么能克服这个问题?

将我的两条评论合并到一个答案中。

尝试将EDMX文件中日期时间的“StoredGeneratedPattern”属性设置为Computed。 从以下主题: http : //www.stackoverflow.com/a/4688135/2488939

为此,请单击edmx文件转至edmx文件设计器。 然后找到你的桌子和财产。 右键单击要更改的表中的列,然后单击属性。 然后应该出现属性窗口,您将看到其中一个属性“StoredGeneratedPattern”。 将其更改为计算。

除了按照Vishwaram Maharaj的建议更改EDMX文件外,您还应该定义EF和DB之间的表匹配。 “LoginDateTime- Allow nulls false”的表描述本身就是false。 如果插入NULL,则该字段明确允许NULL。 如果列真的不应该包含NULL值,请将列更改为不允许NULL:

 ALTER TABLE LoginRecords ALTER COLUMN LoginDateTime DATETIME NOT NULL; 

通过更改T4模板文件在entity framework5和6中设置默认值。以下更改.tt(模板文件)示例:红色表示删除,绿色表示添加 在此处输入图像描述 这将使用OnCreated方法在所有实体类中添加构造函数。

如下

 public partial class Category { public Category() { this.Products = new HashSet(); OnCreated(); } partial void OnCreated(); public int Id { get; set; } public string Name { get; set; } public virtual ICollection Products { get; set; } } 

然后使用与实体相同的命名空间创建类文件。

 public partial class Category { partial void OnCreated() { Name = "abc" } } 

请参阅此https://www.youtube.com/watch?v=i8J2ipImMuU

乐于助人