0

私はこのエンティティを持っています:

public class Account
{
    [Key]
    [ForeignKey("Company")]
    [Required]
    public Guid CompanyId { get; set; }

    public virtual Company Company { get; set; }
}

そしてこれ:

public class Company : PrimaryKey
{
    public string Name { get; set; }

    public virtual ICollection<Contact> Contacts { get; set; }
    public virtual Account Account { get; set; }
}

流暢な API を使用してカスケード削除を有効にする方法を教えてください。

modelBuilder.Entity<Company>().HasOptional<Account>().WithRequired().WillCascadeOnDelete();

しかし、これが何を意味するのかわかりません。基本的に、会社が削除されたときに削除されるCompanyオプションが必要です。Account

4

2 に答える 2

0

カスケード削除の有効化のリンクに従ってください。

WillCascadeOnDelete メソッドを使用して、リレーションシップでカスケード削除を構成できます。依存エンティティの外部キーが null 許容でない場合、Code First はリレーションシップにカスケード削除を設定します。依存エンティティの外部キーが null 許容の場合、Code First はリレーションシップにカスケード削除を設定せず、プリンシパルが削除されると、外部キーは null に設定されます。

これらのカスケード削除規則は、次を使用して削除できます。

modelBuilder.Conventions.Remove<OneToManyCascadeDeleteConvention>()
modelBuilder.Conventions.Remove<ManyToManyCascadeDeleteConvention>()

次のコードは、リレーションシップが必須になるように構成し、カスケード削除を無効にします。

modelBuilder.Entity<Course>()
    .HasRequired(t => t.Department)
    .WithMany(t => t.Courses)
    .HasForeignKey(d => d.DepartmentID)
    .WillCascadeOnDelete(false);

あなたの例のようなもの:

modelBuilder
  .Entity<Company>()
  .HasOptional<Account>()
  .HasForeignKey(a => a.CompanyId)
  .WillCascadeOnDelete();
于 2013-09-06T17:22:51.783 に答える