確かに、EF 4.1 RC Codefirst、DataAnnotations、FluentAPIの機能はまだ私には圧倒されています。時々私は自分が何をしているのか本当にわからない;-)次のPOCOを見てください:
public class Country
{
[Key]
public Guid ID { get; set; }
[Required]
public virtual Currency Currency { get; set; }
}
public class Currency
{
[Key]
public Guid ID { get; set; }
public virtual ICollection<Country> Countries { get; set; }
}
一般的な考え方:すべての国が通貨を持っている必要があります。ただし、通貨を国に割り当てる必要はまったくありません。
EFに対応するデータベースを作成させると、慣例により、関係はCASCADEDELETEに設定されます。つまり、通貨を削除すると、対応する国も削除されます。しかし、私の場合、これは私が望むものではありません。
CASCADE DELETEを無効にするために、FluentAPIでいくつかのコードを思いつきました。
modelBuilder.Entity<Country>()
.HasRequired(cou => cou.Currency)
.WithOptional()
.WillCascadeOnDelete(false);
私はこれが意味すると思いました:すべての国は通貨を必要とします。また、この通貨には0、1つ以上の国が割り当てられている場合があります(オプション)。また、通貨を削除するたびに、対応する国(存在する場合)はカスケード削除されません。
驚いたことに、対応する通貨を削除した場合でも、指定されたアプローチで国をカスケード削除します。誰かが私が恋しいものを教えてもらえますか?