Fluent NHibernate:渴望在映射中加载多个集合
Fluent NHibernate: Eager load multiple collections in mapping
假设我有以下具有多个集合属性的实体...
public class Parent
{
public virtual int Id { get; set;}
public virtual ICollection<FirstChild> FirstChildren { get; set; }
public virtual ICollection<SecondChild> SecondChildren { get; set; }
}
有没有一种方法可以使用流畅的 NHibernate 同时急切加载这两个属性?或者只是急于加载与父项关联的所有内容。
如果我有以下作为我的映射...
public ParentMapping()
{
Id(p => p.Id).GeneratedBy.Identity();
HasMany(p => p.FirstChildren)
.Table("FirstChildren")
.KeyColumn("Id")
.Inverse()
.Cascade.AllDeleteOrphan()
.Fetch.Join();
HasMany(p => p.SecondChildren)
.Table("SecondChildren")
.KeyColumn("Id")
.Inverse()
.Cascade.AllDeleteOrphan()
.Fetch.Join();
}
上面的映射导致错误:
'Cannot simultaneously fetch multiple bags'.
如果我只在其中一个属性上使用它,那么在映射中使用 Fetch.Join() 是有效的。
我可以使用 ToFuture()
查询来预先加载所有内容,但是,我更愿意在映射中执行此操作。
您需要使用 ISet
而不是 ICollection
才能使用该功能。
你可以看看here and here.
假设我有以下具有多个集合属性的实体...
public class Parent
{
public virtual int Id { get; set;}
public virtual ICollection<FirstChild> FirstChildren { get; set; }
public virtual ICollection<SecondChild> SecondChildren { get; set; }
}
有没有一种方法可以使用流畅的 NHibernate 同时急切加载这两个属性?或者只是急于加载与父项关联的所有内容。
如果我有以下作为我的映射...
public ParentMapping()
{
Id(p => p.Id).GeneratedBy.Identity();
HasMany(p => p.FirstChildren)
.Table("FirstChildren")
.KeyColumn("Id")
.Inverse()
.Cascade.AllDeleteOrphan()
.Fetch.Join();
HasMany(p => p.SecondChildren)
.Table("SecondChildren")
.KeyColumn("Id")
.Inverse()
.Cascade.AllDeleteOrphan()
.Fetch.Join();
}
上面的映射导致错误:
'Cannot simultaneously fetch multiple bags'.
如果我只在其中一个属性上使用它,那么在映射中使用 Fetch.Join() 是有效的。
我可以使用 ToFuture()
查询来预先加载所有内容,但是,我更愿意在映射中执行此操作。
您需要使用 ISet
而不是 ICollection
才能使用该功能。
你可以看看here and here.