Fluent nhibernate 什么';这种流畅的NHibernate配置有什么问题?
以下设置有什么问题?AutoPersistanceModel上的Where筛选器似乎不起作用,表名约定也似乎不起作用。我经常遇到的错误是“命名空间“urn:nhibernate-mapping-2.2”中的元素“class”在命名空间“urn:nhibernate-mapping-2.2”中具有无效的子元素“property”。可能的元素列表应为:命名空间“urn:nhibernate-mapping-2.2”中的“meta、jcs缓存、缓存、id、复合id”Fluent nhibernate 什么';这种流畅的NHibernate配置有什么问题?,fluent-nhibernate,Fluent Nhibernate,以下设置有什么问题?AutoPersistanceModel上的Where筛选器似乎不起作用,表名约定也似乎不起作用。我经常遇到的错误是“命名空间“urn:nhibernate-mapping-2.2”中的元素“class”在命名空间“urn:nhibernate-mapping-2.2”中具有无效的子元素“property”。可能的元素列表应为:命名空间“urn:nhibernate-mapping-2.2”中的“meta、jcs缓存、缓存、id、复合id” public ISessi
public ISessionFactory BuildSessionFactory()
{
return Fluently.Configure()
.Database(
OracleConfiguration.Oracle9.ConnectionString(
c => c.FromConnectionStringWithKey("ConnectionString")))
.Mappings(m =>
{
m.AutoMappings.Add(GetAutoPersistanceModel);
m.FluentMappings.AddFromAssembly(Assembly.GetExecutingAssembly());
})
.BuildSessionFactory();
}
public AutoPersistenceModel GetAutoPersistanceModel()
{
return AutoPersistenceModel.MapEntitiesFromAssemblyOf<User>()
.Where(type => type.IsClass && !type.IsAbstract && type.Namespace == "Some.Namespace")
.ConventionDiscovery.Add<IConvention>(
Table.Is(x => "tbl" + x.EntityType.Name.Pluralize())
);
}
public ISessionFactory BuildSessionFactory()
{
流畅地返回。Configure()
.数据库(
OracleConfiguration.Oracle9.ConnectionString(
c=>c.FromConnectionString WithKey(“ConnectionString”))
.Mappings(m=>
{
m、 添加(GetAutoPersistanceModel);
m、 FluentMappings.AddFromAssembly(Assembly.getExecutionGassembly());
})
.BuildSessionFactory();
}
公共AutoPersistenceModel GetAutoPersistanceModel()
{
从Assemblyof()返回AutoPersistenceModel.MapEntities
.Where(type=>type.IsClass&!type.isastract&&type.Namespace==“Some.Namespace”)
.ConventionDiscovery.Add(
表.Is(x=>“tbl”+x.EntityType.Name.Pluralize())
);
}
例外情况是NHibernate首先遇到了一个无效的
元素。NHibernate hbm文件中的第一个元素应该(几乎)始终是一个Id,因此,AutoPersistenceModel
似乎找不到您的标识符
您的ID在实体中是如何命名的?AutoPersistenceModel
希望它们被字面上称为Id,如果它们有什么不同,那么它将找不到它们
您可以使用FindIdentity
configuration选项覆盖AutoPersistenceModel
查找ID的方式,如果您无法修改实体,这将非常有用
// if your Id is EntityId
.WithSetup(s =>
s.FindIdentity = property => property.DeclaredType.Name + "Id"
)
詹姆斯正确地引导你,但他的片段是错误的
.WithSetup(s=> s.FindIdentity = p => p.Name == "ID"));
这就是你想要的!将“ID”替换为您的实际财产