Ef code first 实体框架addorupdate错误,带有DatabaseGenerated字段

Ef code first 实体框架addorupdate错误,带有DatabaseGenerated字段,ef-code-first,entity-framework-migrations,Ef Code First,Entity Framework Migrations,以下是我的模型课程: public abstract class BaseEntity { [Key] public Guid Guid { get; set; } [DatabaseGenerated(System.ComponentModel.DataAnnotations.Schema.DatabaseGeneratedOption.Identity)] public int Id { get; set; }

以下是我的模型课程:

public abstract class BaseEntity
{
    [Key]
    public Guid Guid { get; set; }

    [DatabaseGenerated(System.ComponentModel.DataAnnotations.Schema.DatabaseGeneratedOption.Identity)]
    public int Id
    {
        get;
        set;
    }
}

public class Menu : Abstract.BaseEntity
{
    public string Title { get; set; }

    public string Url { get; set; }
}

public class SpaceShipEntities : DbContext
{
    public DbSet<Menu> Menu { get; set; }

    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        base.OnModelCreating(modelBuilder);
    }
}
公共抽象类BaseEntity
{
[关键]
公共Guid Guid{get;set;}
[DatabaseGenerated(System.ComponentModel.DataAnnotations.Schema.DatabaseGenerateOptions.Identity)]
公共整数Id
{
得到;
设置
}
}
公共类菜单:Abstract.BaseEntity
{
公共字符串标题{get;set;}
公共字符串Url{get;set;}
}
公共类太空船实体:DbContext
{
公共数据库集菜单{get;set;}
模型创建时受保护的覆盖无效(DbModelBuilder modelBuilder)
{
基于模型创建(modelBuilder);
}
}
我使用迁移。这是我的配置类:

internal sealed class Configuration : DbMigrationsConfiguration<SpaceProject.Models.SpaceShipEntities>
{
    public Configuration()
    {
        AutomaticMigrationsEnabled = false;
    }

    protected override void Seed(SpaceProject.Models.SpaceShipEntities context)
    {
        context.Menu.AddOrUpdate(
            c => c.Title,
            new Menu() { Guid = Guid.NewGuid(), Title = "Главная" }
        );
    }
}
内部密封类配置:dbmigtorinsconfiguration
{
公共配置()
{
AutomaticMiggerationsEnabled=假;
}
受保护的替代无效种子(SpaceProject.Models.SpaceShipEntities上下文)
{
context.Menu.AddOrUpdate(
c=>c.标题,
新建菜单(){Guid=Guid.NewGuid(),Title=“Гааааа”}
);
}
}
当我在空数据库中使用包命令“updatedatabase-Verbose”时,新行已插入到数据库中。但当我第二次使用“updatedatabase-Verbose”时,Seed方法尝试更新行,我有以下错误:

更新记录时发生错误。有关详细信息,请参阅内部异常。-->System.InvalidOperationException:不支持更改列模板“标识”。栏:“Id”。表:“CodeFirstDatabaseSchema.Menu”


如果将Guid用作键,则它仍将被索引。我将使用Id作为键,并用[DatabaseGenerated(System.ComponentModel.DataAnnotations.Schema.DatabaseGenerateOption.Identity)]装饰Guid,然后用以下内容作为种子:

protected override void Seed(SpaceProject.Models.SpaceShipEntities context)
    {
        context.Menu.AddOrUpdate(
            c => c.Guid,
            new Menu() { Guid = Guid.Parse("..."), Title = "Главная" }
        );
    }

这似乎与您有一个作为键的Guid和一个自动生成的int有关。它正在尝试将菜单表上的标识(键)列从Guid更改为int。为什么这两列都有?你能去掉一列吗?这不是一个解决方案,但它可能有助于解决问题!我需要uniqueidentifier字段,因为另一个处理数据库的程序需要这种类型的字段作为键列。用于排序和计数的标识列。