使用Nhibernate同时插入两个相关表格
我有两个实体,比如使用Nhibernate同时插入两个相关表格,nhibernate,Nhibernate,我有两个实体,比如 public class Person { public int PersonId { get; set; } public string Name { get; set; } public int DataId { get; set; } } public class Data { public int DataId
public class Person
{
public int PersonId { get; set; }
public string Name { get; set; }
public int DataId { get; set; }
}
public class Data
{
public int DataId { get; set; }
public string details { get; set; }
public int PersnId{ get; set; }
}
正如您所看到的,这两个表是相互关联的。我想要一个解决方案,在两个表中同时插入数据。我1-插入人,2-插入数据,然后更新人,它可以工作,但我正在寻找消除更新的方法。
我的person表映射:
<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" namespace="TestNhibrinate" assembly="TestNhibrinate">
<class name="TestNhibrinate.Entites.Person" table="Person" lazy="false">
<id name="PersonId" column="PersonId" type="int" >
<generator class="identity" />
</id>
<property name="Name" column="Name" type="String" length="50" />
<many-to-one name="Adress" class="TestNhibrinate.Entites.Adress" column="AdressId"/>
</class>
</hibernate-mapping>
和数据的相同映射。您的实体应该如下所示:
public class Person
{
public Person()
{
DataCollection = new List<Data>();
}
public int PersonId { get; set; }
public string Name { get; set; }
public int DataId { get; set; }
public IList<Data> DataCollection{get;set;}
public void AddData(Data item)
{
if(!DataCollection.Contains(item))
{
DataCollection.Add(item);
}
}
}
public class Data
{
public int DataId { get; set; }
public string details { get; set; }
public Person Person{ get; set; }
}
公共类人物
{
公众人士()
{
DataCollection=新列表();
}
公共int PersonId{get;set;}
公共字符串名称{get;set;}
public int DataId{get;set;}
公共IList数据收集{get;set;}
公共无效添加数据(数据项)
{
如果(!DataCollection.Contains(项))
{
数据收集。添加(项);
}
}
}
公共类数据
{
public int DataId{get;set;}
公共字符串详细信息{get;set;}
公众人物{get;set;}
}
通过这种方式,您可以创建从个人到数据的一对多关系。如果在添加一些数据后保存person实体,则数据也将被持久化。这当然取决于您的级联选项
我不知道如何用XML映射来映射,因为我总是使用Fluent或Auto映射