我有2张桌子
帐户
-Id
-AccountName
承包商
-Id
-AccountId referneces account table
-Code
当我在承包商表中插入记录时,它应该在帐户表中将承包商的名称作为帐户名称插入,并将AccountId存储在承包商表中。
有人可以帮助我为此生成映射文件吗?我尝试了以下
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" namespace="NHibernateService" assembly="NHibernateService">
<class name="Account" table="tbl_Account" entity-name="Account">
<id name="id" column="id">
<generator class="native" />
</id>
<property name="AcName" column="AcName" type="string" length="50" />
</class>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" namespace="NHibernateService" assembly="NHibernateService">
<class name="Contractor" table="tbl_Contractor" entity-name="Contractor">
<id name="id" column="id">
<generator class="native" />
</id>
<property name="Code" column="Code" type="string" length="50"/>
<bag name="Account" cascade="none" lazy="false">
<key column="Id"/>
<one-to-many entity-name="Account" />
</bag>
</class>
</hibernate-mapping>
答案 0 :(得分:1)
承包商的映射应该是安静的不同。表/模式结构表明,每个合同可以只有一个帐户......而不是更多。所以不能<bag>
但我们需要<many-to-one>
:(参见5.1.10. many-to-one)
<class name="Contractor" table="tbl_Contractor" entity-name="Contractor">
<id name="id" column="id">
<generator class="native" />
</id>
<property name="Code" column="Code" type="string" length="50"/>
<!--<bag name="Account" cascade="none" lazy="false">
<key column="Id"/>
<one-to-many entity-name="Account" />
</bag>-->
<many-to-one name="Account" column="AccountId" cascade="all" >
</class>
Contractor
C#定义应该像
public class Contractor
{
public virtual Account Account { get; set; }
...
所有这些对我们都有用,因为我们指示NHibernate将更改级联到第二端:
var contract = new Contract {... };
var account = new Account { .. };
contract.Account = account;
session.Save(contract); // both are persisted
答案 1 :(得分:0)
我使用NHibernate已经有一段时间了,但我相信你需要在父对象上为子集合配置cascade
,在你的情况下是Contractor
类。
这样,当你这样做时:
var contractor = new Contractor { Code = "XX" };
contractor.Account.Add(new Account { Name = "Account Name" });
session.Insert(contractor);
NHibernate将生成:
INSERT INTO Account ...
INSERT INTO Contractor ...
您目前将其设置为none
,您可能需要all
或save-update
,具体取决于您是否要删除级联。查看this page了解更多信息。