3

Fluent NHibernate を使用して NHibernate モデルをマップしています。

場合によっては、すべてのテーブルにアンダースコアを付けたいという問題が発生しました。したがってTable(...)、マッピングの定義を変更することはできません。外部から変更する必要があります。

私がこれまでに持っているもの:

モデル:

class Foo
{
    public virtual int Id { get; set; }
}

class FooMapping : ClassMap<Foo>
{
    Table("foo_table");

    Id(x => x.Id).Column("foo_id");
}

私のコントローラーのどこかに:

/*...*/
if (yourehappyandyouknowit)
{
    Fluently.Configure()
    /*...*/
        .Conventions.Add(Table.Is(x => "_" + x.TableName));
    /*...*/
}

これは常に「_foo_table」ではなく「foo_table」を出力します。

定義をコメントアウトすると、魅力的に機能します...しかし、マッピング内にセットTable(...)が必要です。Table(...)

4

3 に答える 3

0

定義する限り

Table("foo_table");

これらすべての場所を更新し、プレフィックスを追加する必要があります。どこかで定義された定数値を使用するのが最善でしょう。それを再度変更する必要がある場合は、すべて 1 か所で...

public const string TABLE_PREFIX = "_";

そしてそれを使う

Table(TABLE_PREFIX + "foo_table");

簡単にリファクタリングするには、すべてのファイルで検索しTable("て置き換えるだけです...Table(TABLE_PREFIX + "

于 2013-10-12T08:21:21.113 に答える
0

次の規則を使用して試すことができます。

using FluentNHibernate.Conventions;
using FluentNHibernate.Conventions.Instances;
using FluentNHibernate.Conventions.AcceptanceCriteria;
using FluentNHibernate.Conventions.Inspections;

namespace MyDatabaseProject.Conventions
{
    public class UnderscoreTableNameConvention : IClassConvention
    {
        public void Accept(IAcceptanceCriteria<IClassInspector> criteria)
        {

        }
        public void Apply(IClassInstance instance)
        {
            instance.Table("_" + instance.TableName);
        }
    }
}

次に、次のようなものでセッション ファクトリを構築する必要があります。

sessionFactory = Fluently.Configure(normalConfig)
                  .Mappings(m =>
                      m.FluentMappings
                      .AddFromAssemblyOf<OrderMap>()
                      .Conventions.AddFromAssemblyOf<UnderscoreTableNameConvention>())
                      .ProxyFactoryFactory("NHibernate.Bytecode.DefaultProxyFactoryFactory, NHibernate")
                  .BuildSessionFactory();

Fluent NHibernate を介してセッション ファクトリを構築した後にマッピングを変更するには、必要な新しいテーブル マッピングを使用してセッション ファクトリを再構築する必要があります。

于 2013-10-14T11:58:41.663 に答える