ASP MVC4 でプロジェクトを作成しており、コード ファーストを使用しています。これは、コードを実行した後、コードからデータベースが自動的に作成されることを意味します。しかし、データベースのオプションのリレーションシップでは、デフォルトでカスケード オン デリートがオンになっていないことに気付きました。
グーグルで調べたところ、コンテキストに追加する必要があることがわかりましたが、これによりエラーが発生します。
WillCascadeOnDelete を true に設定し、データベースを削除して Entity Framework が再度作成できるようにすると、テーブルのないデータベースが作成されます。ただし、false に設定すると、問題なく動作します。
ここに私がそれを真にするために使用するコードがあります:
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Entity<Location>()
.HasOptional(r => r.PartOfLocations)
.WithMany()
.WillCascadeOnDelete();
base.OnModelCreating(modelBuilder);
}
これが私のロケーションモデルです:
public class Location
{
[Key, DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)]
public int LocationId { get; set; }
[Display(Name = "Name"), Required]
public String Name { get; set; }
[Display(Name = "Description", ResourceType = typeof(ViewRes.ClassModelStrings))]
public String Description { get; set; }
public int LocationTypeId { get; set; }
[ForeignKey("LocationTypeId")]
public virtual LocationType LocationType { get; set; }
public virtual ICollection<Location> PartOfLocations { get; set; }
public override string ToString()
{
return this.Name;
}
}
また、作成後にデータベースを削除すると、次のエラーが表示されます: データベース XXX にアクセスできません。
そして、データベース名の後に " ( single user ) " が追加されますが、これが役立つかどうかはわかりません