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);

然后生成数据库用户实体表仍然生成为用户,但不是我想要的用户。它接缝接受方法失败。这是 FluentNHibernate 错误吗?

4

1 回答 1

1

删除此代码

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

因为它不是必需的,甚至可能不是您想要的。FNH 在内部为每个属性提供三个值(例如表名)

  1. 在类图中显式设置的值
  2. 按惯例设定的值
  3. 默认值

它使用它按此顺序找到的内容valueInEffect = explicitValue ?? conventionValue ?? defaultValue

于 2012-06-21T05:55:04.937 回答