0

AutoMapping構成でNHibernate/FluentNhibernateを使用していますが、いくつかの関係の外部キーに問題があります。特に、ナビゲーションプロパティ名がそれが指しているタイプの名前と異なる場合:

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と異なるCountryエンティティの場合。CurrencyNHibernateの自動マッピングは、Countryテーブルに次の外部キーがあると推測します。

  • DefaultCurrency_id:の関係に対応Country.Currency

  • Currency_id:の関係に対応Currency.Countries

Currency.Countries関係をキーで表現できることを自動マッピングに伝える方法DefaultCurrency_id。その結果、Countryテーブルに対してのみ1つのキーが外部になります。

  • DefaultCurrency_id:との関係にCountry.Currency対応Currency.Countries
4

1 に答える 1

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