如果DatabaseGeneratedOption.Indentity存在于模型中,则实体框架错误迁移

时间:2017-06-22 19:51:43

标签: asp.net-mvc entity-framework ef-code-first entity-framework-6 ef-migrations

在我的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: 如果我将KeyDatabaseGeneratedOption.Identity添加到Id属性,请检查我是否有正确的迁移文件。

public partial class Contract
{
    [Key]
    [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    public int Id { get; set; }

    [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    public DateTime Created { get; set; }
}

0 个答案:

没有答案