1

ここに私のモデルクラスがあります:

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」を 2 回目に使用し、シード メソッドが行を更新しようとすると、次のエラーが発生します。

レコードの更新中にエラーが発生しました。詳細については、内部例外を参照してください。---> System.InvalidOperationException: 列テンプレート「Identity」の変更はサポートされていません。列:「ID」。表: 「CodeFirstDatabaseSchema.Menu」。

4

1 に答える 1

0

キーとして使用する場合、Guid はとにかくインデックス化されます。Id をキーとして使用し、Guid を [DatabaseGenerated(System.ComponentModel.DataAnnotations.Schema.DatabaseGeneratedOption.Identity)] で装飾し、次のようにシードします。

protected override void Seed(SpaceProject.Models.SpaceShipEntities context)
    {
        context.Menu.AddOrUpdate(
            c => c.Guid,
            new Menu() { Guid = Guid.Parse("..."), Title = "Главная" }
        );
    }
于 2012-11-07T11:27:43.027 に答える