使用流利的nhibernate时,我做错了很多次吗?
我有两个主要实体(数据库表)
- 项目
- 应用
我有一个名为ProjectApplication的桥表,带有3列(Id,ProjectId,ApplicationId)
一个项目可以有很多应用程序。 应用程序可以在很多不同的项目下面
您的基本多对多映射
目前这是我在流利的nhibernate映射文件中设置的
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); }
这是否有任何缺点,因为我看到有一个HasManyToMany语法所以我不确定它是否在生成的查询或性能等方面有所作为
请指教
一般来说,有两种方法,正如您正确提到的:
- 配对对象的显式映射,导致
one-to-many
和many-to-one
- 隐式映射,不知道使用
many-to-many
的基础表
我(我的个人陈述)几乎可以在任何场景中避免many-to-many
(虽然在一些非常罕见的情况下,可以使用真正的管理对象场景) 。
以下是我的一些尝试,以解释:
- 如何创建NHibernate HasManyToMany关系
- 带有额外列的多对多nhibernate
- Nhibernate:如何用一对多关系表示多对多关系?
为了在这里添加更多内容,我首先要提到的是,对于many-to-many
我们正在从模型中丢失配对对象。 永远。 所以,一旦我们的客户来问问:请,让我的关系之一主要 ,或介绍排序 – 我们根本不能。 这种关系就是这样。 无法如何扩展它。
其次,很有可能 – 非常可能 :我们的客户会来问:你能为我创建一个filter,只选择与Application
相关的Projects
,将一些设置设置为true AND …
在many-to-many
情况下,这将是一个挑战。
具有显式配对对象的场景为第三个实体带来了更多开销。 但可以转换为子查询
有一些Subquery
function的例子:
- 查询HasMany引用
- 是否可以使用NHibernate查询具有一个或多个可能子项的所有对象?
嗯,这是我的观点。 不是说它是正确的。 但是我的经验表明,通过显式对对象映射,我们已经为扩展和复杂查询做好了准备。
- 在Windows服务中运行的线程中最终不会执行
- c#远程事件
- 使用Selenium Webdriver和Windows身份validation(在Chrome中)C#/ ASP.Net
- 安装Visual Studio 2015 Update 1给了我很多:“包没有正确加载”
- 在SQLDataReader上使用
- 在Visual Studio 2005中使用Crystal Reports(C#.NET Windows应用程序)
- 无法打开exceptionDATABASE1.MDF’,因为它是版本655.此服务器支持版本612及更早版本。 不支持降级路径
- 如何使用asp.net在Jquery中validation用户名密码?
- UniWebView消息限制/冲突?