1

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 ) " が追加されますが、これが役立つかどうかはわかりません

4

0 に答える 0