Fluent nhibernate 什么';这种流畅的NHibernate配置有什么问题?

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

以下设置有什么问题?AutoPersistanceModel上的Where筛选器似乎不起作用,表名约定也似乎不起作用。我经常遇到的错误是“命名空间“urn:nhibernate-mapping-2.2”中的元素“class”在命名空间“urn:nhibernate-mapping-2.2”中具有无效的子元素“property”。可能的元素列表应为:命名空间“urn:nhibernate-mapping-2.2”中的“meta、jcs缓存、缓存、id、复合id”

    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”替换为您的实际财产