我正在使用NHibernate / FluentNhibernate和AutoMapping配置,而且我遇到了某些关系的外键问题。特别是导航属性名称与其指向的类型名称不同的那些:
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的自动化将猜测Country表将具有以下外键:
DefaultCurrency_id
:对应Country.Currency
Currency_id
:对应Currency.Countries
如何告诉自动化关系Currency.Countries
可以用DefaultCurrency_id
键表示,导致只有一个国外表的外键:
DefaultCurrency_id
:对应Country.Currency
和Currency.Countries
答案 0 :(得分:1)
您可以在映射中指定所需的任何列名。
供参考:
References(x => x.Foo, "MyFooId")
对于has-many:
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");
}
}