这是我的问题。
我有一个客户表和一个地址表。 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架构中的这种覆盖类
答案 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
。