繁体   English   中英

非键列上的EF6多对多

[英]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表来连接PersonTag

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM