C# EF中的多对多关系没有与实体的链接
我希望使用隐式连接表从多对多关系中的常见模式转变为多对多关系,相反,我希望显式地使用连接表并实现一种多对多依赖实体的延迟加载 这是由断开连接集的设计构成的,其中对象图通过http传递到应用程序服务器。在服务器上,我只更新密钥,而不更新实体。 原因是:如果我试图保存用实体模型的不同实例定义的相同实体,我会得到并发场景错误。 相反,我不想传递对象,我只想传递带有ID的关节表C# EF中的多对多关系没有与实体的链接,c#,entity-framework,ef-fluent-api,C#,Entity Framework,Ef Fluent Api,我希望使用隐式连接表从多对多关系中的常见模式转变为多对多关系,相反,我希望显式地使用连接表并实现一种多对多依赖实体的延迟加载 这是由断开连接集的设计构成的,其中对象图通过http传递到应用程序服务器。在服务器上,我只更新密钥,而不更新实体。 原因是:如果我试图保存用实体模型的不同实例定义的相同实体,我会得到并发场景错误。 相反,我不想传递对象,我只想传递带有ID的关节表 Class ------- int ID List ClassStudent Student ------- int 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
我不需要这个,因为同时发生了变化。
需要帮助使用fluentapi。我试过很多案例。是的,有可能。您只需为
ClassStudent
和两个单向一对多关系(Student->ClassStudent
和Class->ClassStudent
)配置一个复合主键
大概是这样的:
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);
modelBuilder.Entity()
.HasKey(e=>new{e.StudentID,e.ClassID});
modelBuilder.Entity()
.HasMany(e=>e.ClassStudent)
.WithRequired()
.HasForeignKey(e=>e.StudentID);
modelBuilder.Entity()
.HasMany(e=>e.ClassStudent)
.WithRequired()
.HasForeignKey(e=>e.ClassID);
是的,这是可能的。您只需为ClassStudent
和两个单向一对多关系(Student->ClassStudent
和Class->ClassStudent
)配置一个复合主键
大概是这样的:
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);
modelBuilder.Entity()
.HasKey(e=>new{e.StudentID,e.ClassID});
modelBuilder.Entity()
.HasMany(e=>e.ClassStudent)
.WithRequired()
.HasForeignKey(e=>e.StudentID);
modelBuilder.Entity()
.HasMany(e=>e.ClassStudent)
.WithRequired()
.HasForeignKey(e=>e.ClassID);
谢谢!它救了我。我让学生用外键上课。现在,当我得到IQueryable.include时,属性是空的。我应该单独加载班级学生表吗?或者有其他方法使用fluent api配置填充属性?欢迎使用。不过,我不太明白最后的评论/问题。没有什么比这更特别的了。执行类似var classes=db.Class.Include(e=>e.ClassStudent.ToList()代码>不加载ClassStudent
属性。学生的情况类似。是的,只是我忘了给数据播种。没关系。谢谢!它救了我。我让学生用外键上课。现在,当我得到IQueryable.include时,属性是空的。我应该单独加载班级学生表吗?或者有其他方法使用fluent api配置填充属性?欢迎使用。不过,我不太明白最后的评论/问题。没有什么比这更特别的了。执行类似var classes=db.Class.Include(e=>e.ClassStudent.ToList()代码>不加载ClassStudent
属性。类似于Student
s。是的,只是我忘了给数据播种。没关系。