C# 在使用fluent nhibernate时,我是否犯了多对多错误?
我有两个主要实体(db表)C# 在使用fluent nhibernate时,我是否犯了多对多错误?,c#,nhibernate,fluent-nhibernate,many-to-many,C#,Nhibernate,Fluent Nhibernate,Many To Many,我有两个主要实体(db表) 项目 应用程序 我有一个名为ProjectApplication的桥接表,有3列(Id、ProjectId、ApplicationId) 一个项目可以有许多应用程序。 一个应用程序可以应用于许多不同的项目 您的基本多对多映射 目前,这是我在fluent nhibernate映射文件中设置的内容 public class ProjectMap { HasMany(x => x.ProjectApplications) .AsBag(
public class ProjectMap
{
HasMany(x => x.ProjectApplications)
.AsBag().Inverse().Cascade.AllDeleteOrphan().Fetch.Select().BatchSize(80);
}
public class ApplicationMap
{
HasMany(x => x.ProjectsApplications)
.AsBag().Inverse().Fetch.Select().BatchSize(50);
}
我看到有一种hasmanytomy语法,因此我不确定它是否会对生成的查询或性能等产生影响,这有什么不利之处吗
请告知正如您正确提到的,通常有两种方法:
- 配对对象的显式映射,导致
和一对多
多对一
- 使用
多对多
many-to-many
(而在一些非常罕见的情况下,可以使用真正的管理对象场景)
以下是我的一些尝试,以解释:
many-To-many
我们将从模型中失去配对对象。永远。因此,一旦我们的客户来问:请做一个我的关系Main,或者介绍排序——我们根本不能。关系就是这样。没有办法扩展它
其次,也是最有可能的——很有可能:我们的客户会来问:您能为我创建一个过滤器吗?只选择与应用程序相关的项目
,将某些设置设置为true,然后
在多对多
的情况下,这将有点挑战性
带有显式配对对象的场景会给第三个实体带来更多开销。但可以转换为子查询
下面是子查询
电源的一些示例:
这是我的观点。不说它是正确的。但我的经验表明,通过显式对象对映射,我们可以进行扩展,也可以进行复杂查询。我确实支持这种解决方案。我喜欢。因为它的“正面”是用于子查询的!好决定;)@RadimKöhler你能解释一下我怎样才能用这种方法获得更好的性能吗?