C# 非惰性加载
我使用的是NHibernate 3.3.3.4001。我遇到了一个问题,在发出Get请求时,NHibernate没有延迟加载数据。相反,它填充整个对象模型,导致性能非常慢。.hbm文件如下所示:C# 非惰性加载,c#,nhibernate,nhibernate-mapping,C#,Nhibernate,Nhibernate Mapping,我使用的是NHibernate 3.3.3.4001。我遇到了一个问题,在发出Get请求时,NHibernate没有延迟加载数据。相反,它填充整个对象模型,导致性能非常慢。.hbm文件如下所示: <?xml version="1.0" encoding="utf-8" ?> <hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" assembly="My.Assembly" namesp
<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2"
assembly="My.Assembly" namespace="Assembly.Model">
<class name="Parent" table="tblParent">
<id name="ID">
<generator class="native"></generator>
</id>
<version name="Version" column="Version"/>
<component name="Children">
<bag name="Collection" table="tblChildren"
cascade="save-update, merge" inverse="true">
<key column="ParentID"></key>
<one-to-many class="Children"></one-to-many>
</bag>
</component>
<property name="DateCreated" column="DateCreated" update="false" insert="false" />
<property name="Inactive" column="Inactive" />
</class>
</hibernate-mapping>
using (var transaction = Session.BeginTransaction())
{
t = Session.Get<T>(id);
transaction.Commit();
}
我不明白为什么这不是延迟加载,而是查询数据库中的所有子对象?您正在尝试加载组件集合。我认为不可能懒散地加载它们。尝试将您的组件转换为一级实体。不确定我是否理解您的真正目标。上面代码段中的组件内容是否完整?或者它只是一个缩短版本 无论如何,正如这里所说的:(引用) 元素将子对象的属性映射到父类的表的列 因此,背后的想法主要是将其作为C#透视图中的参考对象使用,同时将其存储在一个表中。榜样 因此,如果在您的案例中,子项
实际上只是一个集合-请不要使用上述映射,而是类似以下内容:
public class Person
{
...
public virtual Name Name { get; set; }
public class Name
{
public virtual Person NamedPerson { get; set; }
public virtual string Initial { get; set; }
...
家长:
<class name="Parent" table="tblParent">
<id name="ID" generator="native" />
<version name="Version" column="Version"/>
<!-- just a bag -->
<bag name="Children" table="tblChildren" cascade="save-update, merge" inverse="true">
<key column="ParentID"></key>
<one-to-many class="Child"></one-to-many>
</bag>
<property ...
</class>
谢谢,这让我走上了正轨。主要问题是将
嵌套在
中,很高兴看到这一点。享受NHibernate,伟大的工具;)
<class name="Parent" table="tblParent">
<id name="ID" generator="native" />
<version name="Version" column="Version"/>
<!-- just a bag -->
<bag name="Children" table="tblChildren" cascade="save-update, merge" inverse="true">
<key column="ParentID"></key>
<one-to-many class="Child"></one-to-many>
</bag>
<property ...
</class>
<class name="Child" table="tblChildren">
...
<many-to-one name="Parent" column="ParentID" />
...
public class Parent
{
public virtual IList<Child> Children { get; set; }
...
public class Child
{
public virtual Parent Parent { get; set; }
...