2013-03-02 99 views
0

我正在使用NHibernate/FluentNhibernate與AutoMapping配置,我有一些關係的外鍵麻煩。特別是那些其中導航屬性名稱是從該類型的名稱不同它指向:如果導航屬性名稱與屬性類型不同,如何做NHibernate多對一/一對多的外鍵?

public class Country  
{ 
    public virtual string Code { get; set; } 

    public virtual string Name { get; set; } 

    public virtual Currency DefaultCurrency { get; set; } 
} 

public class Currency 
{ 
    public virtual string Code { get; set; } 

    public virtual decimal Rate { get; set; } 

    public virtual IList<Country> Countries { get; set; }  
} 

在國家實體的情況下,其中導航屬性DefaultCurrency的名稱是從名稱Currency類型不同。 NHibernate的的自動映射會猜測,該國表將具有以下外鍵:

  • DefaultCurrency_id:對應的Country.Currency

  • Currency_id的關係:對應的關係Currency.Countries

如何告訴自動映射關係Currency.Countries可以用DefaultCurrency_id鍵表示,從而導致一鍵橫生只爲國家表:

  • DefaultCurrency_id:相當於您可以指定在映射想要的任何列名的Country.CurrencyCurrency.Countries
+0

你可以發佈你的'Fluent'映射嗎? – rae1 2013-03-05 01:28:44

回答

0

的關係。

爲引用:

References(x => x.Foo, "MyFooId") 

對於具有一對多:

HasMany(x => x.Foos) 
    .KeyColumn("MyFooId") 

對於許多一對多:

HasManyToMany(x => x.Foos) 
    .ChildKeyColumn("MyFooId") 
    .ParentKeyColumn("MyFooId") 

您也可以使用習慣,如:

public class HasManyConventions : IHasManyConvention 
{ 
    public void Apply(IOneToManyCollectionInstance target) 
    { 
     target.Key.Column(target.EntityType.Name + "Id"); 
    } 
} 
相關問題