我正在使用Entity Developer从c#中的数据库生成业务类和映射。
之前我使用过Entity Framework,看起来NHibernate中的pilosophy非常不同。
例如我的问题是Entity Developer生成的类暴露了不同实体之间的关系,但没有做任何事情来保持这些关系同步。
我们来看一下简单的父/子例子。我在DB中创建了两个Parent和Child表,Child表有一个ParentId列,它是Parent表的外键。
Entity Developer生成了Parent和Child类,Child类中有Parent属性,Parent类中有Child的集合。
现在,此代码生成异常,因为Child实例未设置其Parent属性:
class Program
{
static void Main(string[] args)
{
Parent parent = new Parent();
Child child = new Child();
parent.Children.Add(child);
if (child.Parent == null)
{
throw new Exception("The parent in the Child entity was not set");
}
}
}
与Entity Framework相同的代码不会抛出异常。 EF生成的类嵌入了所有逻辑,以保持两侧的关系同步。
我想知道是否有办法生成相同的行为并使用NHibernate作为映射器? 这是Entity Developer的限制吗?是否有另一种工具可以生成能够保持这些关系同步的实体类?或者我是否错误地配置了Entity Developer?
提前致谢。
修改
以下是映射:
<?xml version="1.0" encoding="utf-8"?>
<hibernate-mapping default-cascade="save-update" assembly="ConsoleApplication6" namespace="ConsoleApplication6" xmlns="urn:nhibernate-mapping-2.2">
<class name="Child" table="Child" schema="dbo">
<id name="Id" type="Int32">
<column name="Id" not-null="true" precision="10" scale="0" sql-type="int" />
<generator class="identity" />
</id>
<many-to-one name="Parent" class="Parent">
<column name="ParentId" not-null="true" precision="10" scale="0" sql-type="int" />
</many-to-one>
</class>
</hibernate-mapping>
<?xml version="1.0" encoding="utf-8"?>
<hibernate-mapping default-cascade="save-update" assembly="ConsoleApplication6" namespace="ConsoleApplication6" xmlns="urn:nhibernate-mapping-2.2">
<class name="Parent" table="Parent" schema="dbo">
<id name="Id" type="Int32">
<column name="Id" not-null="true" precision="10" scale="0" sql-type="int" />
<generator class="identity" />
</id>
<bag name="Children" inverse="true" generic="true">
<key>
<column name="ParentId" />
</key>
<one-to-many class="Child" />
</bag>
</class>
</hibernate-mapping>