2013-03-02 106 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"); 
    } 
} 
相关问题