1

私は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がマスターが存在するかどうかを確認し、上記のコードを使用してマスターに新しい詳細を挿入する方法はありますか?これは、マスターが存在するかどうかに関係なく機能し、重複した主キーの例外が発生しないようにするために、上記のコード(または私の場合に機能する他のコード)を再利用することを意味します。

これを行う理由は、コードから一部のロジックを削除し、複数のデータベースアクセスを回避したいためです。私が検索で見たものについては、マスターが存在するかどうかを手動でチェックしない限り、それは可能だと思いますが、同じ問題に直面し、これに対する回避策を見つけたという希望があります。

よろしく、マティアス。

4

0 に答える 0