我在使用代码首先在EF6中连接多对多关系时遇到问题,然后在此之外创建一个传递关联。
有三个类:人物,标签和传递。
每个人都有一个可选的围兜。
每个标签都有一个可选的围兜,而不是唯一的。
每次传递都有一个必需的TagId。
我希望通过获取具有相同Bib的所有标签来访问链接到Person的所有Passings,然后将所有Passings与每个标签相关联。
我已尝试在我的DBContext类中使用DBModelBuilder,但无法使其正常工作,而且EF6似乎试图生成一个中间表,这似乎是不必要的。
public class Person
{
[Key]
public int PersonId { get; set; }
...
public string Bib { get; set; }
public virtual ICollection<Tag> Tags { get; set; }
public virtual ICollection<Passing> Passings
}
public class Tag
{
[Key]
public string TagId { get; set; }
public string Bib { get; set; }
public virtual ICollection<Passing> Passings { get; set; }
public virtual Person Person { get; set; }
}
public class Passing
{
[Key]
public int PassingId { get; set; }
...
public string TagId { get; set; }
public virtual Tag Tag { get; set; }
}
答案 0 :(得分:1)
这是必要的,当你有一个*到*多样性进入一个表时,它会自动创建另一个链接这些表的表,否则你不能在你的一个表中放入无限和可变数量的foraign键
答案 1 :(得分:1)
实体框架使用navigation properties来表示数据库关系。如果您不想要一个额外的表,那么您所拥有的不是数据库关系,因为不涉及密钥。
你应该可以使用某种功能(或扩展功能)来获得你想要的东西:
IQueryable<Passing> PersonPassings(YourContext db, Person p)
{
return db.Passings.Where(pa => pa.Tag.Bib == p.Bib);
}
另一方面,如果您想创建正确的关系,则需要一个中间Bibs
表来连接Person
和Tag
。