多对多关联单向映射
相关实体类参考前面
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"/>
</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>
ManyToManyRelation.cs类
public class ManyToManyRelation
{
private readonly ISessionFactory sessionFactory = new Configuration().Configure().BuildSessionFactory();
protected object CategoryId = 1;
protected object OrderId = 1;
public void AddCategoryToOrder()
{
using (ISession session = sessionFactory.OpenSession())
using (ITransaction transaction = session.BeginTransaction())
{
var order = session.Get<Order>(OrderId);
var category = session.Get<Category>(CategoryId);
order.Categories.Add(category);
session.Save(order);
Console.WriteLine("ManyToManyRelation_AddCategoryToOrder:" + order.Categories.Count);
transaction.Commit();
}
using (ISession session = sessionFactory.OpenSession())
{
var order = session.Get<Order>(OrderId);
var category = session.Get<Category>(CategoryId);
Console.WriteLine("Categories是否包含category:" + order.Categories.Contains(category));
}
}
}
运行结果如图:
数据库表架构生成,参考前面