0

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

基本上,aUser既可以是 的贷方,也可以是借方Item。也就是说Item可以被多个Users借用,但只能被一个s拥有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; }
}

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

如何正确处理人际关系?我是否需要连接表?

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 建议应该做什么) - 尽管通常你一次借一个“项目”(所以那也是一对多的)。

如果您正在寻找“借用”项目的历史记录(这使其成为多对多) - 那么您需要制作一个带有附加标志(如active等)的手工索引表。

对于更复杂的场景,请查看我刚才制作的这些详细示例 - 它具有您可能需要的大部分映射。

使用codefirst或fluent API与同一实体的多对多(连接表)关系?

联接表中的 Code First Fluent API 和导航属性

带有附加数据的 EF 代码优先多对多

于 2013-03-25T01:50:51.090 回答