【问题标题】:entity framework addorupdate error with DatabaseGenerated fieldDatabaseGenerated 字段的实体框架 addorupdate 错误
【发布时间】:2012-11-07 19:27:43
【问题描述】:

这是我的模型类:

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);
    }
}

我使用迁移。还有我的配置类:

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 = "Главная" }
        );
    }
}

当我在空数据库中使用包命令“Update-Database -Verbose”时,新行已插入数据库。但是当我第二次使用“Update-Database -Verbose”,并且 Seed 方法尝试更新行时,我有以下错误:

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

【问题讨论】:

  • 似乎与您拥有一个作为键的 Guid 和一个自动生成的 int 的事实有关。它试图将标识(键)列从 Guid 更改为菜单表上的 int。为什么你有这两列——你能去掉一个吗?不是解决方案,但它可能有助于弄清楚发生了什么!
  • 我需要 uniqueidentifier 字段,因为另一个使用数据库的程序需要这种类型的字段作为键列。我用于排序和编号的标识列。

标签: ef-code-first entity-framework-migrations


【解决方案1】:

如果您将 Guid 用作键,无论如何都会对其进行索引。我将使用 Id 作为键并使用 [DatabaseGenerated(System.ComponentModel.DataAnnotations.Schema.DatabaseGeneratedOption.Identity)] 装饰 Guid,然后使用:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-31
    • 2014-12-18
    • 1970-01-01
    • 2010-12-19
    • 1970-01-01
    相关资源
    最近更新 更多