0

次の2つのエンティティ関係があり、マッピングを正しく行うのに多くの問題があります(流暢なAPIを使用)

基本的に、Useraはの貸し手と借り手の両方になることができますItem。言い換えればItem、複数のsが借りることUserができますが、1つだけが所有できますUser

public class User {
    public int UserId { get; set; }

    public virtual ICollection<Item> ItemsOwned { get; set; }
    public virtual ICollection<Item> ItemsBorrowed{ get; set; } 
}

public class Item {
    public int ItemId { get; set; }
    public virtual User ItemOwner{ get; set; } 
    public virtual ICollection<User> ItemBorrowers { get; set; }
}

1対多と多対多が必要なようです。数え切れないほどの構成を試しましたが、混乱しているだけだと思います。

どうすれば関係を正しくすることができますか?結合テーブルが必要ですか?

4

2 に答える 2

1

このようなマッピングを作成する必要があります、

 protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {

        modelBuilder.Entity<Item>().HasRequired(i=>i.ItemOwner).WithMany(u=>u.ItemsOwned );          
        modelBuilder.Entity<Item>().HasMany(i=>i.ItemBorrowers ).WithMany(u=>u.ItemsBorrowed);          
}
于 2013-03-25T01:37:19.113 に答える
1

これは一見問題ないように見えます(そして、@ Jayanthaが提案したことは、それが十分にまっすぐである場合に実行する必要があります)-通常、一度に1つの「アイテム」を借ります(その場合も1対多になります)。

「借用」アイテムの履歴を探している場合(多対多になります)、追加のフラグ(activeなど)を使用して手作りのインデックステーブルを作成する必要があります。

より複雑なシナリオについては、私が少し前に作成したこれらの詳細な例を見てください-それはあなたが必要とするかもしれないマッピングのほとんどを持っています。

codefirstまたはfluentAPIを使用した同じエンティティとの多対多(テーブルに参加)の関係?

結合テーブルで最初のFluentAPIとナビゲーションプロパティをコーディングする

EFコード-追加データを含む最初の多対多

于 2013-03-25T01:50:51.090 に答える