多个一对多关系映射
本文关键字:映射 关系 一对多 | 更新日期: 2023-09-27 18:18:31
我是NHibernate的新手,我的任务是用existinig实现来增强一个项目。当前的设计很简单,如"第一个项目":
store(1)->(many)Employee
现在我想这样做:
store(1)->(many)Employee AND
Empoyee(1)->(many)Child
重新实现从商店员工到员工子级的映射逻辑不起作用。试图在网上找到类似的enter code here
但没有运气。非常感谢有关映射的任何提示。
谢谢
@MeckLey:非常感谢对于响应- 我正在尝试使用持久规范示例测试映射。在伪代码中,我正在执行以下操作:
new PersistenceSpecification<Child>(_session, new CustomEqualityComparerChild())
.CheckProperty(c => c.Name, "Child1Name")
--other Child prperties--
.CheckReference(c => c.Employee, new Employee{
Store = new Store{--store properties--},
--other Employee Properties--
});
外键 不应具有 null 的列是插入的 null 值。我尝试进行测试,以便以正确的顺序创建所有内容:
Store->Employee->Child
..但我失败了
@Meckley好吧,这是真的......"store"是"退货订单","员工"是"退货订单行项目","Chlid"是"退货订单替换项"这些类遵循"第一个示例"的确切结构,映射如下:
public ReturnOrderMap()
{
Id(x => x.Id);
Map(x => x.OrderTrackingNumber);
Map(x => x.UserId);
HasMany(x => x.ReturnOrderLineItems).Inverse().Cascade.AllDeleteOrphan();
}
public ReturnOrderLineItemMap()
{
Id(x => x.Id);
Map(x => x.Sku);
Map(x => x.Status);
Map(x => x.Comments);
HasMany(x => x.ReturnOrderReplacementItems).Inverse().Cascade.AllDeleteOrphan();
References(x => x.ReturnOrder);
}
public ReturnOrderReplacementItemMap()
{
Id(x => x.Id);
Map(x => x.Quantity);
Map(x => x.Size);
References(x => x.ReturnOrderLineItem);
}
我将跳过映射测试并尝试看看它是否真的有效,也许您无法使用 PesristenceSpecification 测试这样的东西。
好的,让它工作了。我为遇到相同任务的任何人提供一些详细信息:
1(员工映射中子项的映射应为HasMany(x => x.Child(.Cascade.AllDeleteOrphan((;(无反转(
2(在子表中允许外键字段为 NULL,以便删除子对象是可行的
3( 首先保存将保存附加到它的员工的 Store 对象,然后将子对象添加到员工列表中
4(创建一个单独的方法来保存 Empolyee 实例(类似于保存 Store 实例的方法(,该方法将依次保存添加到员工子对象列表中的所有 Child 对象。