LINQ多对多关系:解决方案?

Jus*_*der 6 c# linq many-to-many linq-to-sql

LINQ到目前为止一直非常优雅,但是为了执行基本的m2m查询,它提供了我无法立即看到的解决方案.

更糟糕的是,虽然它适用于任何其他表关系,但LINQ并没有给我一个关于我的m2m表的类结构的关联.

所以我可以做的事情

artwork.artists.where(...)
//or
artist.Artworks.add(artwork)
Run Code Online (Sandbox Code Playgroud)

但我不能这样做

artwork.artowrks_subjects.tagSubjects.where(...)
//or
tagSubject.artworks_subjects.add(artwork)
Run Code Online (Sandbox Code Playgroud)

替代文字http://img299.imageshack.us/img299/257/20090902122107.png

是否有解决此限制的常见模式?

Mik*_*obs 5

我在LINQ2SQL中使用M2M的方式:

  1. 将表拖到构建器中,就像您在问题中显示一样
  2. 除去之间的关系 artworks_subjectartwor ķ
  3. 创建一个新的关系FROM artists_subject TO artwork
  4. 单击新关系以获取其属性
  5. 将基数从OneToMany更改为OneToOne(因为ManyToOne不存在)
  6. 打开"子属性"部分并更改"名称"字段以使其成为单数(Artworks to Artwork)

现在tagSubject实体将拥有的集合artwork_subjectsartwork_subject将有类型的属性艺术品称为艺术品.所以你现在可以制作一个LINQ表达式

var x = dbcontext.tagSubjects.Single(s=>s.name=="Landscape").
    Artwork_Subjects.
    Select(as=>as.Artwork.Name);
Run Code Online (Sandbox Code Playgroud)


Jus*_*der 3

我自己找到了解决方案。为了使自动化关系发挥作用,两个表都需要主键 (oops)。请注意,artworks_subjects 缺少 PK 符号。