[英]EF6 Many-to-Many on Non-Key Column
我在使用代码首先在EF6中连接多对多关系时遇到问题,然后在此之外创建一个传递关联。
有三个类:Person,Tag和Passing。
每个人都有一个可选的围兜。
每个标签都有一个可选的Bib,而不是唯一的。
每次传递都有一个必需的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; }
}
这是必要的,当你有一个*到*多样性进入一个表时,它会自动创建另一个链接这些的表,否则你不能在你的一个表中放入无限和可变数量的foraign键
实体框架使用导航属性来表示数据库关系。 如果您不想要其他表,那么您在此处所拥有的不是数据库关系,因为不涉及密钥。
你应该能够使用某种功能(或扩展功能)来获得你想要的东西:
IQueryable<Passing> PersonPassings(YourContext db, Person p)
{
return db.Passings.Where(pa => pa.Tag.Bib == p.Bib);
}
另一方面,如果要创建正确的关系,则需要一个中间Bibs
表来连接Person
和Tag
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.