按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
乐于助人
- 是否有可能在ASP.NET MVC路径到达控制器之前更改它的querystring变量?
- 在MVC中使用SelectListItem创建一个通用存储库DropDown
- LINQ to Entities无法识别方法’System.String get_Item(System.String)’,
- 通过ASP.NET身份2中的UserManager.Update()更新用户
- 我无法关闭ASP.NET MVC控制器的请求validation
- 使用列表列表发布表单MVC
- 如果错误已经逐字段显示,如何不显示ASP MVC ValidationSummary?
- 如何实现通用的GetById(),其中Id可以是各种类型
- 在具有不同根相对路径的代理后面运行ASP.NET MVC应用程序