Tag: 多对多

使用流利的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语法所以我不确定它是否在生成的查询或性能等方面有所作为 请指教

如何以N:N关系手动加载相关实体?

我正在使用EF5,当关系为1:N时,如果我想加载相关实体,我会执行以下操作: 使用T-SQL,我使用T-SQL从数据库加载主要实体,如下所示: select * from MainEntities where … 使用T-SQL我加载相关的实体 select * from RelatedEntities where IDMainEntity IN (—) 此时,EF使用相关实体填充主要实体的属性导航。 此外,在dbContext中每个实体类型的local属性中,我拥有每种类型的所有实体。 但是,如果我使用N:N关系执行相同操作,我没有关系中间表的实体,并且当我执行查询时,我在dbContext的本地具有每种类型的实体,但是未填充属性导航。 我想知道为什么以及它是否存在替代方案。 我使用这种方式是因为我想使用T-SQL来创建动态查询。 如果我使用预先加载,我对动态查询的灵活性与使用TSQL时不同,效率较低。 如果我使用显式加载我做N个额外的查询,主要实体的结果中的每个记录之一用我的方式,我只有一个额外的查询,因为我一次得到所有相关的实体。 如果我使用延迟加载我有同样的问题,N个额外的查询。 当关系为N:N时,为什么EF不会填充相关属性? 谢谢。

NHibernate – 使用Junction / Joiner表进行多对多查询

我在这里发现了非常相似的问题,但没有一个与我正在寻找的完全匹配。 我发现的两个最接近的线程是(是的,它们是不同的线程): NHibernate多对多标准 (1) NHibernate多对多标准 (2) 但是,我认为这两者都使用直接的多对多关系。 我实际上通过与联结表具有两个一对多关系来模拟多对多关系,这是非常标准的做法。 这是我的NHibernate映射: 文件: 属性: 乔伊纳: 所以我的问题与上面的第二个链接完全相同,但是使用了连接表。 所以: 给定一组属性ID,我希望运行一个查询,该查询为我提供了具有所有匹配属性的文件。 我可以轻松地对集合中的每个属性ID运行“n”查询,并比较每个列表中出现的文件ID的每个列表,但我觉得应该有一种更简单的方法可以一次使用一个查询完成所有操作。 例: File | Attributes ———-+—————————————————– foo.txt | (mode = read-only, view = visible) bar.txt | (mode = read-write, security = all, view = visible) duck.txt | (mode = read-only, view = hidden) goose.txt | (more = read-only, security = […]