集合的nHibernate整合主义者映射

时间:2019-05-16 13:27:44

标签: nhibernate nhibernate-mapping mapping-by-code

我本来拥有这一切,但随后在我的应用中进行搜索导致此错误:

  

无法初始化集合:[mas.workflow.dto.SearchCustomer.InboundTrackingNumbers#65117]

在哪里执行innerException中愚蠢的.elt事情:

  

无效的列名“ elt”。   无效的列名“ elt”。 (是的,两次)

这就是我期望的数据...

我有一个SearchCustomer对象,该对象与SQL中的视图相关联,并且这样映射(删除了不相关的字段)

    public SearchCustomerMap()
    {
        Table("Search_Customers");
        Id(p => p.Id, m =>
        {
            m.Column("AddressId");
            m.Generator(Generators.Assigned);
        });
        Property(p => p.CustomerId,m=>m.Unique(false));

        Set(p => p.InboundTrackingNumbers, m =>
        {
            m.Table("OrderInboundTrackingNumber");
            m.Lazy(CollectionLazy.NoLazy);
            m.Fetch(CollectionFetchMode.Join);
            //m.Cascade(Cascade.All);
            //m.Inverse(true);
            m.OrderBy(itn => itn.OrderDate);
            m.Key(k =>
            {
                k.Column("CustomerId");
                k.PropertyRef(p => p.CustomerId);
            });

        } , a => a.ManyToMany(o =>
        {
            o.NotFound(NotFoundMode.Ignore);
        }));

InboundTrackingNumbers是一个IEnumerable,并且OrderInboundTrackingNumber映射如下:

    public OrderInboundTrackingNumberMap()
    {
        Table("OrderInboundTrackingNumber");
        Id(p => p.Id, m =>
        {
            m.Column("Id");
            m.Generator(Generators.Identity);
        });
        Property(p => p.CustomerId);
        Property(p => p.OrderId);
        Property(p => p.OrderDate);
        Property(p => p.InboundTrackingNumber);
    }
如果

搜索(在我的应用程序中)实际上没有任何入站跟踪号,或者是一个SearchCustomer,则效果很好。

但是在错误情况下,我返回了多个具有相同CustomerId的searchCustomer命中(一种有效的方案,因为每个键都被锁定到不同的位置地址)。因此,在SearchCustomer中,AddressId是“键”,并且CustomerId可以重复。因此,每个匹配(在这种情况下为3)应链接到同一组InboundTrackingNumber,因为它们以SearchCustomer.CustomerId = OrderInboundTrackingNumber.CustomerId

的形式加入

我确实尝试了OneToMany而不是ManyToMany,但无济于事。实际上,我得到了一个更奇怪的InnerException

  

无效的对象名称“ InboundTrackingNumbers”。

正在创建的SQL试图查询字段“ FROM InboundTrackingNumbers”的名称,而不是查询基本表“ OrderInboundTrackingNumber”的

我知道在正确构造映射以仅获取与所选客户相关的列表时,有些地方有些错误...

帮助!!! :)

0 个答案:

没有答案