多对多关联双向映射
配置文件,相关实体类参考前面
Category.hbm.xml映射文件
<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" default-lazy="false"
assembly="Ntest"
namespace="Ntest.Entities"
>
<class name="Category">
<id type="int" name="Id">
<column name="Id" />
<generator class="identity"></generator>
</id>
<property name="Name"/>
<bag name="Orders" table="OrderToCategory">
<key column="categoryId"/>
<many-to-many column="orderId"
class="Order"/>
</bag>
</class>
</hibernate-mapping>
Order.hbm.xml映射文件
<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" default-lazy="false"
assembly="Ntest"
namespace="Ntest.Entities"
>
<class name="Order" table="Orders">
<id type="int" name="Id">
<column name="Id" />
<generator class="identity"></generator>
</id>
<property name="Value"/>
<bag name="Categories" table="OrderToCategory">
<key column="orderId"/>
<many-to-many column="categoryId"
class="Category"/>
</bag>
</class>
</hibernate-mapping>
ManyToManyRelationBidirectional.cs类
public class ManyToManyRelationBidirectional
{
ISessionFactory sessionFactory = new Configuration().Configure().BuildSessionFactory();
protected object CategoryId = 1;
protected object OrderId = 1;
public void AddCategoryToOrder()
{
using (var session = sessionFactory.OpenSession())
using (var transaction = session.BeginTransaction())
{
Order order = session.Get<Order>(OrderId);
Category category = session.Get<Category>(CategoryId);
order.Categories.Add(category);
session.Save(order);
transaction.Commit();
}
using (var session = sessionFactory.OpenSession())
{
Order order = session.Get<Order>(OrderId);
Category category = session.Get<Category>(CategoryId);
Console.WriteLine("Categories.Contains:" + order.Categories.Contains(category));
Console.WriteLine("Orders.Contains:" + category.Orders.Contains(order));
}
}
public void AddOrderToCategory()
{
using (var session = sessionFactory.OpenSession())
using (var transaction = session.BeginTransaction())
{
Order order = session.Get<Order>(OrderId);
Category category = session.Get<Category>(CategoryId);
category.Orders.Add(order);
session.Save(category);
transaction.Commit();
}
using (var session = sessionFactory.OpenSession())
{
Order order = session.Get<Order>(OrderId);
Category category = session.Get<Category>(CategoryId);
Console.WriteLine("Categories.Contains:" + order.Categories.Contains(category));
Console.WriteLine("Orders.Contains:" + category.Orders.Contains(order));
}
}
}