Ric*_*ier 5 entity-framework ef-code-first entity-framework-4.3
我想CreatedDate在我的Accounts表中有一个列,定义如下:
CreatedDate DATETIME NOT NULL DEFAULT GETUTCDATE()
Run Code Online (Sandbox Code Playgroud)
这将映射到类中的CreatedDate属性:
public class Account
{
public DateTime? CreatedDate { get; private set; }
// ... other properties ...
}
Run Code Online (Sandbox Code Playgroud)
在创建新帐户时,我想将CreatedDate设置为NULL,并让数据库填充它.当从DB加载现有帐户时,我希望EF检索数据库生成的CreatedDate.
我正在使用EF 4.3代码优先进行显式迁移.当EF为Accounts表生成迁移时,我将其修改如下:
CreatedDate = c.DateTime(nullable: false, defaultValueSql: "GETUTCDATE()"),
Run Code Online (Sandbox Code Playgroud)
不幸的是,当我尝试使用EF 4.3映射表时,EF会尝试在CreatedDate列中插入值NULL.
我尝试为该属性设置DatabaseGeneratedOption.Identity,如Ladislav Mrnka所建议的那样.但是,这会从主键属性中删除标识选项.我尝试使用DatabaseGeneratedOption.Computed,但它继续尝试插入NULL.我恢复了所有迁移并重新启动它们 - 问题仍然存在.
这是我正在做的事情OnModelCreating:
modelBuilder.Entity<Account>().Property(a => a.CreatedDate)
.HasDatabaseGeneratedOption(DatabaseGeneratedOption.Computed);
Run Code Online (Sandbox Code Playgroud)
有没有人有什么建议?
谢谢你的帮助,
理查德
使您的日期在实体中不可为空,或在数据库中不可为空。仅当插入语句不发送显式值时才使用数据库默认值。对于 EF,只有当您用 标记时才会发生这种CreatedDate情况DatabaseGeneratedOption.Identity。如果它从主键中删除默认身份,则强制通过数据注释或 Fluent API 手动执行。
| 归档时间: |
|
| 查看次数: |
3584 次 |
| 最近记录: |