0

我将 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不同的国家实体的情况下。CurrencyNHibernate 的自动映射会猜测 Country 表将具有以下外键:

  • DefaultCurrency_id: 对应的关系Country.Currency

  • Currency_id: 对应的关系Currency.Countries

如何告诉自动映射关系Currency.Countries可以用DefaultCurrency_id键来表示,导致只有 Country 表的一个键是外来的:

  • DefaultCurrency_id: 对应于和的Country.Currency关系Currency.Countries
4

1 回答 1

1

您可以在映射中指定所需的任何列名。

供参考:

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");
    }
}
于 2013-03-05T01:43:01.120 回答