多个一对多关系映射

本文关键字:映射 关系 一对多 | 更新日期: 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 对象。