我有以下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; }
}
看起来我需要一对多,多对多。 我尝试了无数的配置,我想我只是让自己感到困惑。
如何让关系正确?我是否需要联接表?
答案 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