0

私はこれらのテーブルを持っています:

create table Person
(
PersonId int identity(1,1) primary key,
PersonName nvarchar(100) not null
);

create table Question
(
QuestionId int identity(1,1) primary key,
QuestionText nvarchar(100) not null,
AskedBy_PersonId int not null references Person(PersonId),
QuestionModifiedBy_PersonId int not null references Person(PersonId)
);

そして私はこれらのモデルを持っています:

public class Question
{
    public virtual int QuestionId { get; set; }

    public virtual string QuestionText { get; set; }

    public virtual Person AskedBy { get; set; }
    public virtual Person QuestionModifiedBy { get; set; }
}

public class Person
{
    public virtual int PersonId { get; set; }
    public virtual string PersonName { get; set; }
}

FluentNHibernateで自動マッピングを使用しています。参照プロパティは、デフォルトで次のデータベース列名になります。

AskedBy_id
QuestionModifiedBy_id

FluentNHibernateで、参照プロパティをこのスタイルの外部列名にマップするにはどうすればよいですか?

AskedBy_PersonId
QuestionModifiedBy_PersonId

今のところ、私は手動でオーバーライドしています:

.Override<Question>(x => 
{
    x.References(y => y.AskedBy).Column("AskedBy_PersonId");
    x.References(y => y.QuestionModifiedBy).Column("QuestionModifiedBy_PersonId");
})

そのオーバーライドを削除し、FluentNHibernateで外部列名を上記の命名パターンに自動的に従わせたいと思いました

Fluent NHibernateでそれをどのように達成できますか?

4

1 に答える 1

1

IReferenceConventionの実装は簡単です。

public class ReferenceConvention : IReferenceConvention
{
    public void Apply(IManyToOneInstance instance)
    {
        instance.Column(
            instance.Name + "_" + instance.Property.PropertyType.Name + "Id");
    }
}

NHibernateは、規則を読み取るように構成する必要があります(次のようなものを使用)。

Fluently.Configure()
    //... other configuration
    .Mappings(m => m.AutoMappings.Add(
        AutoMap.AssemblyOf<Person>()
            .Conventions.AddFromAssemblyOf<ReferenceConvention>());
于 2012-08-21T13:42:31.060 に答える