EF Code First配置 - 连接表困境

时间:2013-03-25 00:46:56

标签: entity-framework ef-code-first code-first

我有以下2个实体关系,我在绘制正确的映射方面遇到了很多麻烦(使用流畅的api)

基本上,User可以是Item的贷方和借方。换句话说,Item可以由多个User借用,但只能由一个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; }
}

看起来我需要一对多,多对多。 我尝试了无数的配置,我想我只是让自己感到困惑。

如何让关系正确?我是否需要联接表?

2 个答案:

答案 0 :(得分: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);          
}

答案 1 :(得分:1)

初看起来看起来不错(如果它足够直,@Jayantha建议应该做什么) - 虽然通常你一次借用一个'项目'(所以那时也是一对多) 。

如果您正在寻找“借来的”商品的历史(这使其多对多) - 那么您需要制作一个带有其他标志的手工制作的索引表(例如active等等。)。

对于更复杂的场景,请看一下我前面提到的这些详细示例 - 它包含了您可能需要的大多数映射。

Many to many (join table) relationship with the same entity with codefirst or fluent API?

Code First Fluent API and Navigation Properties in a Join Table

EF code-first many-to-many with additional data