Fluent nhibernate FluentNHibernate和自定义TableNameConvention
FluentNHibernate版本1.3.0.727 我有以下自定义TableNameConvention:Fluent nhibernate FluentNHibernate和自定义TableNameConvention,fluent-nhibernate,Fluent Nhibernate,FluentNHibernate版本1.3.0.727 我有以下自定义TableNameConvention: public class TableNameConvention : IClassConvention, IClassConventionAcceptance { public void Accept(IAcceptanceCriteria<IClassInspector> criteria) { criteria.Expect(x =>
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");
}
}
公共类TableNameConvention:IClassConvention,IClassConventionAcceptance
{
公共无效接受(IAcceptanceCriteria标准)
{
Expect(x=>x.TableName,Is.Not.Set);
}
公共无效应用(IClassInstance实例)
{
表(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);
}
}
公共类用户映射:类映射
{
公共用户映射()
{
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);
var-configuration=fluntly.Configure()
.Mappings(m=>m.FluentMappings
.AddFromAssemblyOf()的
.Conventions.Add())
.BuildConfiguration();
var schema=新SchemaExport(配置);
schema.Drop(false,true);
schema.Create(false,true);
然后生成数据库用户实体表仍然是以用户身份生成的,而不是像我希望的那样生成。它表示接受方法失败。这是FluentNHibernate错误吗?删除此代码
public void Accept(IAcceptanceCriteria<IClassInspector> criteria)
{
criteria.Expect(x => x.TableName, Is.Not.Set);
}
public void Accept(IAcceptanceCriteria标准)
{
Expect(x=>x.TableName,Is.Not.Set);
}
因为它是不需要的,甚至可能不是你想要的。FNH在每个属性内部有三个值(例如tablename)
valueInEffect=explicitValue??约定值??默认值
删除此代码
public void Accept(IAcceptanceCriteria<IClassInspector> criteria)
{
criteria.Expect(x => x.TableName, Is.Not.Set);
}
public void Accept(IAcceptanceCriteria标准)
{
Expect(x=>x.TableName,Is.Not.Set);
}
因为它是不需要的,甚至可能不是你想要的。FNH在每个属性内部有三个值(例如tablename)
它使用它在以下顺序中找到的
valueInEffect=explicitValue??约定值??defaultValue
顺便说一句,schema.Drop(false,true)代码>是冗余的,因为Create总是在createbtwschema.drop之前删除(false,true)代码>是多余的,因为Create总是在created之前删除。我如何检查表名值是否在classmap中显式设置?您不需要这样做,因为来自约定的值被来自classmap的值覆盖,查看最后一句中的伪代码如何检查是否在类映射中显式设置了表名值?您不需要这样做,因为来自约定的值被来自类映射的值覆盖,请查看最后一句中的伪代码