使用Sharp Lite Architecture在Fluent NHibernate中使用2个外键到同一个表的命名约定

时间:2012-01-03 01:28:16

标签: asp.net-mvc-3 nhibernate s#arp-architecture

这是我的问题。

我有一个客户表和一个地址表。 customer表有两个外键到地址表。 ShippingAddressFK和BillingAddressFK

通常情况下,如果它只是一个外键,我就会拥有AddressFK。但由于它是两个,我不知道该怎么做。

我看到了这个: Fluent Nhibernate AutoMapping -- 2 foreign keys to same table?

但我不确定如何将其转换为Sharp Lite Architecture覆盖.cs文件。

在MyStore示例中,这是我能找到的最接近的:

public class OrderOverride : IOverride
    {
        public void Override(ModelMapper mapper) {
            mapper.Class<Order>(map => map.Property(x => x.OrderStatus, 
                status => {
                    status.Type<OrderStatusCustomType>();
                    status.Column("OrderStatusTypeFk");
                }));
        }
    }

我注意到它们很相似我只是不确定如何更改上面的解决方案以适应Sharp Lite架构中的这种覆盖类

2 个答案:

答案 0 :(得分:0)

无法访问visual studio所以没有试过这个,考虑根据您粘贴的代码和您链接到的其他问题中的代码的伪代码:

public class CustomerOverride : IOverride
{
    public void Override(ModelMapper mapper) {
        mapper.Class<Customer>(map => map.Property(x => x.BillingAddress, 
            address => {
                address.Type<Address>();
                address.Column("BillingAddressFk");
            }));
        mapper.Class<Customer>(map => map.Property(x => x.ShippingAddress, 
            address => {
                address.Type<Address>();
                address.Column("ShippingAddressFk");
            }));
    }
}

我刚看了Order override in SharpLite,这不是流利的nhibernate,它是我从未使用的nhibernate代码映射。这可能不是定义多个属性覆盖的正确方法,但希望上面的代码可以正常工作。如果没有将fluentnhibernate标签更改为nhibernate,那么更了解它的人应该能够提供帮助。

答案 1 :(得分:0)

您要引用的示例是将您的某个属性映射到自定义类型,例如枚举。

您需要将关系映射到多个地址,并为其指定与您的约定不同的列名。

public void Override(ModelMapper mapper)
{
    mapper.Class<Customer>(map =>
                           map.ManyToOne(
                               x => x.BillingAddress,
                               x => x.Column("BillingAddressFk")));

    mapper.Class<Customer>(map =>
                           map.ManyToOne(
                               x => x.ShippingAddress,
                               x => x.Column("ShippingAddressFk")));
}

请注意ManyToOne而不是Property