2012-01-03 16 views
0

這是我的問題。命名約定使用夏普建築架構在流利NHibernate的同一張表中使用2個外鍵

我有一個客戶表和一個地址表。客戶表有兩個到地址表的外鍵。 ShippingAddressFK和BillingAddressFK

通常我只是有AddressFK,如果它只是一個外鍵。但既然是兩個,我不知道該怎麼去做。

我看到這一點: Fluent Nhibernate AutoMapping -- 2 foreign keys to same table?

但我不知道如何翻譯,爲夏普精簡版架構覆蓋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"); 
       })); 
     } 
    } 

我發現它們是相似的,我只是不知道如何改變上述解決方案來滿足這種超越階級的夏普精簡版架構

回答

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,那麼一些對此知道更多的標籤應該能夠提供幫助。

+0

這是我的第一個直覺。但這不是如何完成的。當我這樣做時,我得到以下異常:「預期類型實現IUserType,ICompositeUserType或IType。 參數名稱:persistentType」 所以我想這可能是完全不同的東西。 – Bill 2012-01-04 18:25:47

0

您所指的示例是將您的某個屬性映射到自定義類型,如Enum。

您需要將您的關係映射到多個地址,併爲其指定一個與您的約定不同的列名稱。

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

相關問題