私はMaster-Detailrelotionshipと、それをEntity Framework(4.1)で実装する方法について掘り下げてきました。私には2つのクラスがあります:
[Table("master")]
public class Master
{
[Key]
[Column("id")]
public int id {get; set;}
public virtual ICollection<Detail> Children { get; set;}
}
[Table("detail")]
public class AuthGrantDetailEntity
{
[Key]
[Column("id")]
public int Id { get; set; }
[ForeignKey("MasterId")]
public virtual Master MasterEntity { get; set; }
}
だから、ここまではすべてがよさそうだ。私はこの状況について多くのコメントを読んでいますが、それに対する答えが見つかりませんでした(またはおそらく私はそれを理解していませんでした)。マスターとディテールの両方を挿入したい場合は、理解できて、問題なく動作します。例:
using (var repo = MasterRepository)
{
Master masterEntity = new Master();
master.id = 1;
Detail detailEntity = new Detail();
detailEntity.id = 1;
masterEntity.Children = new List<Detail>;
masterEntity.Childern.add(detailEntity);
repo.Add(masterEntity);
}
私の質問は次のとおりです。マスターと詳細を挿入してそれらの変更を保存した後、前に挿入したマスターに属するいくつかの新しい詳細を追加する必要があるとします。そのためには、マスターが存在するかどうかを確認し、存在する場合は新しい詳細を追加する必要があります(これはすべてコーディングによるものです。現在、この方法で実行しています)。EFがマスターが存在するかどうかを確認し、上記のコードを使用してマスターに新しい詳細を挿入する方法はありますか?これは、マスターが存在するかどうかに関係なく機能し、重複した主キーの例外が発生しないようにするために、上記のコード(または私の場合に機能する他のコード)を再利用することを意味します。
これを行う理由は、コードから一部のロジックを削除し、複数のデータベースアクセスを回避したいためです。私が検索で見たものについては、マスターが存在するかどうかを手動でチェックしない限り、それは可能だと思いますが、同じ問題に直面し、これに対する回避策を見つけたという希望があります。
よろしく、マティアス。