在我的Asp.Net MVC项目中,我使用Entity Framework Code First。 今天我尝试创建一个新实体
public partial class Contract
{
public int Id { get; set; }
public DateTime Created { get; set; }
}
我使用up方法为此模型生成了迁移:
public override void Up()
{
CreateTable(
"dbo.Contracts",
c => new
{
Id = c.Int(nullable: false, identity: true),
Created = c.DateTime(nullable: false),
})
.PrimaryKey(t => t.Id);
}
哪个好,工作得很好。但现在我想在插入时在DB中生成Created属性。为此,我使用了DatabaseGeneratedOption.Identity
(来自here)。所以现在我有一个像这样的模型
public partial class Contract
{
public int Id { get; set; }
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public DateTime Created { get; set; }
}
使用up方法有一个不同的迁移文件:
public override void Up()
{
CreateTable(
"dbo.Contracts",
c => new
{
Id = c.Int(nullable: false),
Created = c.DateTime(nullable: false, defaultValueSql: "GETUTCDATE()"),
})
.PrimaryKey(t => t.Id);
}
哪个错了。主要区别在于Id属性在此配置中不是标识。
有人可以解释为什么会这样吗?
为了解决这个问题,我使用了DatabaseGeneratedOption.Computed
,但我仍然感到困惑,为什么会为Identity
选项生成错误的迁移文件。
UPD:
如果我将Key
和DatabaseGeneratedOption.Identity
添加到Id属性,请检查我是否有正确的迁移文件。
public partial class Contract
{
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int Id { get; set; }
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public DateTime Created { get; set; }
}