1

FluentNHibernate バージョン 1.3.0.727

次のカスタム TableNameConvention があります。

public class TableNameConvention : IClassConvention, IClassConventionAcceptance
{
    public void Accept(IAcceptanceCriteria<IClassInspector> criteria)
    {
        criteria.Expect(x => x.TableName, Is.Not.Set);
    }

    public void Apply(IClassInstance instance)
    {
        instance.Table(instance.EntityType.Name + "s");
    }
}

次のエンティティ マッピングがあります。

public class UserMap : ClassMap<User>
{
    public UserMap()
    {
        Id(x => x.Id).GeneratedBy.Identity();
        Map(x => x.Email).Not.Nullable().Length(200);
        Map(x => x.FirstName).Length(100);
        Map(x => x.LastName).Length(100);
        Map(x => x.Password).Not.Nullable().Length(30);
    }
}

私はこのようなデータベースを生成しています:

var configuration = Fluently.Configure()
    .Mappings(m => m.FluentMappings
        .AddFromAssemblyOf<IEntity>()
                              .Conventions.Add<TableNameConvention>())
        .BuildConfiguration();

var schema = new SchemaExport(configuration);
schema.Drop(false, true);
schema.Create(false, true);

次に、データベースの生成ユーザーエンティティテーブルは引き続きユーザーとして生成されますが、ユーザーとしては生成されません。Accept メソッドが失敗するようです。これは FluentNHibernate のバグですか?

4

1 に答える 1

1

このコードを削除する

public void Accept(IAcceptanceCriteria<IClassInspector> criteria)
{
    criteria.Expect(x => x.TableName, Is.Not.Set);
}

それは必要ではなく、おそらくあなたが望むものでもないからです。FNHには、プロパティごとに内部的に3つの値があります(例:テーブル名)。

  1. クラスマップで明示的に設定された値
  2. 慣例により設定された値
  3. defaultvalue

そしてそれはそれがこの順序で見つけたものを使用しますvalueInEffect = explicitValue ?? conventionValue ?? defaultValue

于 2012-06-21T05:55:04.937 に答える