gpt4 book ai didi

c# - Entity Framework 6 中的直接导航属性

转载 作者:太空宇宙 更新时间:2023-11-03 15:45:43 25 4
gpt4 key购买 nike

我想实现以下目标:

public class A
{
public int ID { get; set; }
public string Name { get; set; }

public virtual ICollection<B> Bs { get; set; }
}

public class B
{
public int ID { get; set; }
public string Name { get; set; }

public virtual ICollection<A> As { get; set; }
}

public class C
{
public int AID { get; set; }
public int BID { get; set; }
public string OtherProperty { get; set; }
}

A 和 B 很多很多,由 C 加入。但是,C 也有一些自己的属性,这就是为什么我需要表示它。

我想从 A 直接到达 B,而不必先经过 C。 (从 B 到 A)

如果 C 简单地加入 A 和 B 而没有额外的属性,这将很容易。但是因为 C 有额外的属性,我需要表示它,所以我得到以下错误。

Cannot automatically bind the navigation property 'Bs' on entity type 'A' for the entity set or singleton 'A' because there are two or more matching target entity sets or singletons. The matching entity sets or singletons are: B, Bs.

这是我对它的映射帮助...

modelBuilder.Entity<A>()
.HasMany<B>(x => x.Bs)
.WithMany(x => x.As)
.Map(x =>
{
x.MapLeftKey("a_id");
x.MapRightKey("b_id");
x.ToTable("c");
});

最佳答案

如果您想使用 C,我建议您更改模型,如下所示:

public class A
{
public int ID { get; set; }
public string Name { get; set; }

public virtual ICollection<C> Cs { get; set; }
}

public class B
{
public int ID { get; set; }
public string Name { get; set; }

public virtual ICollection<C> Cs { get; set; }
}

public class C
{
public int AID { get; set; }
public virtual A A { get; set; }
public int BID { get; set; }
public virtual B B { get; set; }

public string OtherProperty { get; set; }
}

然后,在您的 OnModelCreating 方法中,您可以在 CAC 之间配置两个一对多关系B 这样:

protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Entity<C>().HasRequired(c => c.A).WithMany(a => a.Cs).HasForeignKey(c => c.AID);
modelBuilder.Entity<C>().HasRequired(c => c.B).WithMany(b => b.Cs).HasForeignKey(c => c.BID);
}

如您所见,这最终是一个多对多关系,但现在您也在映射联结表,因为您需要在其上添加一些属性。

关于c# - Entity Framework 6 中的直接导航属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28223021/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com