0

これは、ASP.NET MVC 4の調査に費やした最初の日です。具体的には、Web APIを使用しており、明らかにこの問題は実際にはMSSQLの問題です。このエラーを取得するためにEF移行PM>Update-Databaseを実行していますが、最初にモデルを作成したときに発生しました。私のモデルは次のとおりです。

public class Car
{
    public int Id { get; set; }
    public string Name { get; set; }

    public int MakeId { get; set; }
    public virtual Make Make { get; set; }

    public int ModelId { get; set; }
    public virtual Model Model { get; set; }
}

public class Make
{
    public int Id { get; set; }
    public string Name { get; set; }

    public virtual ICollection<Model> Models { get; set; }
}

public class Model
{
    public int Id { get; set; }
    public string Name { get; set; }


    public int MakeId { get; set; }
    public virtual Make Make { get; set; }
}

DBコンテキストは次のとおりです。

public class CarsContext : DbContext
    {
        public CarsContext() : base("name=CarsContext") { }
        public DbSet<Car> Cars { get; set; }
        public DbSet<Make> Makes { get; set; }
        public DbSet<Model> Models { get; set; }
    }
}

助けていただければ幸いです。私のバックグラウンドはPHPとMySQLの5/6であるため、これは急な学習曲線です。

ありがとう。

4

1 に答える 1

1

ルーク・マクレガーは正しいです。これを修正した方法に加えて、エンティティフレームワークが提供するデフォルトのマッピングをオーバーライドして、カスケード削除を行わないようにすることができます。CarsContextクラスでは、OnModelCreating()メソッドをオーバーライドし、fluentを使用して独自のマッピングを指定できます。これは、EFがデフォルトで実行しようとしていることをオーバーライドします。したがって、次のようなことができます。

protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
    modelBuilder.Entity<Car>()
            .HasOptional(x => x.Model)
            .WithMany(y => y.Cars) //Add this property to model to make mapping work
            .WillCascadeOnDelete(false);
}

これは、自動移行でも機能します。

お役に立てば幸いです。

于 2012-12-28T12:48:09.320 に答える