问题描述
我有两个类Order and Items
我想要一个像这样的方法
class Order
{
public virtual IList< Item> GetItems(Order order)
{
//获取该订单的项目。
}
}
class Item
{
公共虚拟IList< Order> GetOrders(商品)
{
//获取商品所有的订单。
$ b是写这个方法创建一个方法我应该创建一个属性public virtual IList< Item>项目{get;组; }
我应该怎么做这个是nhibernate的映射?
$ b $显然你有一个多对多的关系:一个订单可以有很多项目,一个项目可以属于很多订单。在一个关系数据库中,你需要用一个单独的表来表示这个表,我假设你有这个表 - 我们假设这个表被称为 OrdersItems 。
映射:
public class OrderMap:ClassMap< Order>
{
public OrderMap()
{
HasManyToMany(x => x.Items)
.Cascade.All()
.Table( OrdersItems);
}
}
public class ItemMap:ClassMap< Item>
{
public ItemMap()
{
HasManyToMany(x => x.Orders)
.Cascade.All()
.Inverse()
.Table(OrdersItems);
}
}
I have two classes Order and Items
I want a method like this
class Order { public virtual IList<Item> GetItems(Order order) { //get items for that order. } } class Item { public virtual IList<Order> GetOrders(Item item) { //get all the orders in which that items is present. } }
Is it write to create a method like this or instead should I create a property
public virtual IList<Item> Items { get; set; }
And how should I do the mapping for this is nhibernate??
Apparently you have a many-to-many relationship: An order can have many items and an item can belong to many orders. In a relational database you need to express this with a separate table which I presume you have - let's assume this table is called OrdersItems.
Following the Store/Product example from the Fluent NHibernate documentation you would create an Items property in an Order and an Orders property in Item:
class Order { public virtual IList<Item> Items { get; protected set; } } class Item { public virtual IList<Order> Orders { get; protected set; } }
And the mappings:
public class OrderMap : ClassMap<Order> { public OrderMap() { HasManyToMany(x => x.Items) .Cascade.All() .Table("OrdersItems"); } } public class ItemMap : ClassMap<Item> { public ItemMap() { HasManyToMany(x => x.Orders) .Cascade.All() .Inverse() .Table("OrdersItems"); } }
这篇关于流利的Nhibernate多对多的映射方式的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!