gpt4 book ai didi

fluent-nhibernate - 这个 Fluent NHibernate 配置有什么问题?

转载 作者:行者123 更新时间:2023-12-04 07:41:52 26 4
gpt4 key购买 nike

以下设置有什么问题? AutoPersistanceModel 上的 Where 过滤器似乎不起作用,表名称约定似乎也不起作用。我最终得到的错误是“命名空间‘urn:nhibernate-mapping-2.2’中的元素‘class’在命名空间‘urn:nhibernate-mapping-2.2’中有无效的子元素‘property’。预期的可能元素列表:命名空间 'urn:nhibernate-mapping-2.2' 中的 'meta, jcs-cache, cache, id, composite-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())
);
}

最佳答案

异常是说 NHibernate 遇到了 <property />元素在前,这是无效的。 NHibernate hbm 文件中的第一个元素应该(几乎)总是一个 Id,所以看起来 AutoPersistenceModel找不到您的标识符。

您的 ID 在您的实体中是如何命名的? AutoPersistenceModel期望它们被字面上称为 Id,如果它们有任何不同,那么它将找不到它们。

您可以使用 FindIdentity配置选项如何覆盖 AutoPersistenceModel查找 ID,如果您无法修改您的实体,这会很有用。

// if your Id is EntityId
.WithSetup(s =>
s.FindIdentity = property => property.DeclaredType.Name + "Id"
)

关于fluent-nhibernate - 这个 Fluent NHibernate 配置有什么问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/699709/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com