EF中的多对多关系没有链接到实体

时间:2016-09-01 20:08:16

标签: c# entity-framework ef-fluent-api

我想从使用隐式联合表的多个共同模式转换到可能关系,而是我想明确地使用联合表并实现一种多对多依赖实体的延迟加载。

这是由断开连接集的设计构成的,其中对象图通过http传递给应用服务器。在服务器上,我只更新密钥,而不是实体。 原因是:如果我尝试保存使用实体模型的不同实例定义的相同实体,则会出现并发方案错误。 相反,我不想传递对象,而只是想传递带有ID的联合表。

Class
-------
int ID
List ClassStudent

Student
-------
int ID
List ClassStudent


ClassStudent // this type must be explicitely defined in the model
--------------
StudentID
ClassID

是否可以使用FluentApi定义此类配置?

常见的情况是使用类型:

Student
---------------
int ID
List Classes

Class
----------
int ID
List Students

我不需要这种并发更改。 需要帮助使用流畅的API。我尝试了很多案例。

1 个答案:

答案 0 :(得分:2)

是的,这是可能的。您所需要的只是为ClassStudent和两个单向one-to-many关系(Student -> ClassStudentClass -> ClassStudent)配置复合PK。

这样的事情:

modelBuilder.Entity<ClassStudent>()
    .HasKey(e => new { e.StudentID, e.ClassID });

modelBuilder.Entity<Student>()
    .HasMany(e => e.ClassStudent)
    .WithRequired()
    .HasForeignKey(e => e.StudentID);

modelBuilder.Entity<Class>()
    .HasMany(e => e.ClassStudent)
    .WithRequired()
    .HasForeignKey(e => e.ClassID);