Fluent nhibernate Fluent NHibernate为不同的基本类型提供不同的约定

Fluent nhibernate Fluent NHibernate为不同的基本类型提供不同的约定,fluent-nhibernate,naming-conventions,conventions,Fluent Nhibernate,Naming Conventions,Conventions,此时,我们将所有实体和映射保留在同一个程序集中。我们的实体派生自一个基本类实体,它是一个EntityWithTypedId 此外,我们还有一个表名约定,告诉我们将表名复数化 现在我想创建另外两个基本类型,例如AggregateRotentity和AggregateEntity,它们都来自实体。 我想为两个基本实体创建两组约定: 比如说: 对于从AggregateRotentity表派生的所有实体,应以“ag_u2;”作为前缀,Id是增量生成的,但对于从AggregateTity表派生的所有实体,

此时,我们将所有实体和映射保留在同一个程序集中。我们的实体派生自一个基本类实体,它是一个EntityWithTypedId

此外,我们还有一个表名约定,告诉我们将表名复数化

现在我想创建另外两个基本类型,例如AggregateRotentity和AggregateEntity,它们都来自实体。 我想为两个基本实体创建两组约定:

比如说: 对于从AggregateRotentity表派生的所有实体,应以“ag_u2;”作为前缀,Id是增量生成的,但对于从AggregateTity表派生的所有实体,应以“a_2;”作为前缀,并应分配Id


可以根据某些条件设置约定吗?

可以使用多个约定,每个约定在其接受方法中检查特定类型

比如:

public class LegacyEntityTableConvention : IClassConvention, IClassConventionAcceptance
{
  public void Accept(IAcceptanceCriteria<IClassInspector> criteria)
  {
    criteria.Expect(x => x.EntityType.IsAny(typeof(OldClass), typeof(AnotherOldClass)));
  }

  public void Apply(IClassInstance instance)
  {
    instance.Table("tbl_" + instance.EntityType.Name);
  }
}
公共类LegacyEntityTableConvention:IClassConvention,IClassConventionAcceptance
{
公共无效接受(IAcceptanceCriteria标准)
{
Expect(x=>x.EntityType.IsAny(typeof(OldClass),typeof(AnotherOldClass));
}
公共无效应用(IClassInstance实例)
{
表(“tbl_u3;”+instance.EntityType.Name);
}
}
只是FNH Wiki中的一段代码

您可以使用多个约定来执行此操作,每个约定在其Accept方法中检查特定类型

比如:

public class LegacyEntityTableConvention : IClassConvention, IClassConventionAcceptance
{
  public void Accept(IAcceptanceCriteria<IClassInspector> criteria)
  {
    criteria.Expect(x => x.EntityType.IsAny(typeof(OldClass), typeof(AnotherOldClass)));
  }

  public void Apply(IClassInstance instance)
  {
    instance.Table("tbl_" + instance.EntityType.Name);
  }
}
公共类LegacyEntityTableConvention:IClassConvention,IClassConventionAcceptance
{
公共无效接受(IAcceptanceCriteria标准)
{
Expect(x=>x.EntityType.IsAny(typeof(OldClass),typeof(AnotherOldClass));
}
公共无效应用(IClassInstance实例)
{
表(“tbl_u3;”+instance.EntityType.Name);
}
}
只是FNH Wiki中的一段代码