这个问题已经asked already,但没有得到正确答案。
对于流畅的nhibernate是否有属性名称约定,以便查找Id
而不是查找ProductId
?
PrimaryKeyConvention
适用于数据库中的列名,而不是属性名。
考虑这种情况:
public class Product
{
public int ProductId { get; set; }
public string Name { get; set; }
}
public class AutomappingConfiguration : DefaultAutomappingConfiguration
{
public override bool ShouldMap(Type type)
{
bool shouldMap = type.In(typeof(Product));
return shouldMap;
}
}
public void TestFluentNHibernate()
{
var configuration = Fluently.Configure().
Database(MsSqlConfiguration.MsSql2008.ConnectionString("database=asd;server=.\\sqlexpress;trusted_connection=true;"))
.Mappings(m =>
{
IAutomappingConfiguration cfg = new AutomappingConfiguration();
m.AutoMappings.Add(AutoMap.AssemblyOf<Product>(cfg).Conventions.AddFromAssemblyOf<PrimaryKeyConvention>());
});
var factory = configuration.BuildSessionFactory();
}
结果:
FluentNHibernate.Visitors.ValidationException:实体“Product”没有映射Id。使用Id方法映射您的标识属性。例如:Id(x =&gt; x.Id)。
我可以添加/覆盖哪些约定来告诉流畅的nhibernate在属性名称中查找“EntityName”+“Id”?我查看了this常规页面但未找到要覆盖的页面。
答案 0 :(得分:1)
public class AutomappingConfiguration : DefaultAutomappingConfiguration
{
public override bool IsId(Member member)
{
return member.Name == member.DeclaringType.Name + "Id";
}
}