问题标签 [automapping]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
sql-server - 1.0RC 版本中 Fluent Nhibernate Automapping 的问题
我是 NHibernate 的新手,并且遇到了一些让 Automap 功能正常工作的问题。这是我遇到的几个问题。
Fluent NHibernate 的入门 wiki ( http://wiki.fluentnhibernate.org/Getting_started)定义了一个包含商店、产品和员工类的示例,以及这些类的映射。我用 AutoMapping 替换了手动映射,并使用 Fluent NHibernate 来生成模式。每件事都正确生成。但是,当应用程序尝试保存示例商店、产品和员工对象时,我收到错误“TransientObjectException 未处理:对象引用了未保存的瞬态实例 - 在刷新之前保存瞬态实例。类型:FluentExample.Entities.Employee,实体: FluentExample.Entities.Employee”。
自动映射如下所示:
对象创建代码(直接来自 wiki)如下所示。我应该提到,使用手动流畅映射时对象创建工作正常。
尝试在我自己的一个类上使用 AutoMap 功能时,会创建一个类,但由于某种原因,当我尝试实际插入记录时出现错误。主要错误消息显示“ AssertionFailure 未处理:空值”。这是我的类的示例、配置/映射、错误和创建表脚本。(注意:类中的属性是用于 ASP.NET MVC 的,与 NH 无关。)
这是 Fluent NHibernate 配置。
和错误。呸!
还有表模式——只是为了好玩。
我已经尝试了很多方法来让自动映射在我的环境中工作,但还没有完全成功。我尝试过的一些变化包括
- 使用静态地图并允许 Fluent Nhibernate 重新创建我的表。
- 将 Id 上的私有集更改为公共
- 创建一个primarykeyconvention 以尝试设置Guid,以防出现问题并将其添加到我的映射中。
主键约定:
非常感谢任何建议或反馈。
nhibernate - 如何使用 Fluent NHibernate 创建聚集索引?
我正在使用 Fluent-NHibernate(带有自动映射)来生成我的表,但想选择与默认使用的 ID 字段不同的聚集索引。如何使用 Fluent NHibernate 在默认主键字段以外的字段上创建聚集索引?
这背后的主要原因很简单。我将 Guids 用于我的主键字段。默认情况下,NHibernate 在主键字段上创建聚集索引。由于 Guid 通常不是顺序的,因此在主键字段上进行聚类会导致性能问题。
众所周知,在表的末尾追加记录比在表中插入记录要便宜得多。此外,表中的记录在物理上按照聚集索引中的项目顺序存储。由于 Guid 在某种程度上是“随机的”并且不是连续的,因此可能会生成小于表中已经存在的其他 Id Guid 的值的新 Guid - 导致表插入而不是追加。
为了尽量减少这种情况,我有一个名为 CreatedOn 的列,它的类型为 DateTime。我需要将表聚集在这个 CreatedOn 列上,以便附加而不是插入所有新记录。
欢迎任何关于如何实现这一点的想法!!!
注意:我意识到我可以使用 Sequential Guid,但出于安全原因,我不想走这条路。
注意:我仍然没有对这篇文章的答案,但我目前正在思考一些想法。
在没有 Fluent 的情况下使用 NHibernate,我认为可以直接在 NHibernate 中创建聚集索引。我对 NHibernate 的了解还不够,不知道如何做到这一点。我只是很漂亮(几乎绝对)确信它可以完成。
Fluent-NHibernate 曾经包含一种在最近重写之前在 SQL 对象上设置属性(例如,聚集索引)的方法。现在这个选项似乎已经消失了。我可能会在某处发布一个问题,看看该选项是否仍然可用。如果是这样,我可能会使用它来设置聚集索引。
Fluent-NHibernate 提供了在流畅构建后公开配置以进行手动编辑的能力。我没有尝试过这个功能,但希望它可以提供设置聚集索引所需的粒度级别。
最坏的情况是,我可以编写一个 SQL 脚本来更改所有表上的聚簇索引,一旦它们生成。但是,我对这种方法有几个问题。A. 由于我使用自动模式生成,NHibernate 会在下次评估配置时“撤消”我的聚集索引更改吗?2. NHibernate 检测到聚集索引被改变了会报错吗?我需要对此进行测试,但还没有这样做。我真的很讨厌这个解决方案。我正在针对 SQLServer2008 和 MySQL 测试我的数据库。NHibernate 的部分优点在于它与数据库无关。一旦我们引入脚本,所有的赌注都没有了。
有一个在称为 IPropertyInstance 的流式约定中使用的接口,从该接口继承的类具有一个 Index 属性,该属性允许在该字段上创建索引。问题是没有标志或其他选项允许将索引创建为聚集索引。最简单的解决方案是向此方法添加一个属性以允许创建聚集索引。我想我可能会向 Fluent-NHibernate 开发人员建议这个。
nhibernate - Fluent Nhibernate Automapping 和 Guids / UniqueIdentifiers 作为主键字段的问题
我正在尝试使用 Fluent-NHibernate 自动映射功能(在最新版本的软件中)并且在使用 Guids 作为主键字段时遇到了问题。如果我使用整数字段作为主键,则表会成功生成,并且所有 Nhibernate 功能似乎都可以正常工作。仅供参考,我正在使用 NHibernate 生成我的数据库表。
下面是几个具有整数 ID 的类。
以下是具有 GUID 的相同类。
这是我的配置。
为了解决这个问题,我尝试为 1)命名 Id 字段(尽管我认为它应该是不必要的)和 2)生成 Id(我认为这将是自动的)生成约定(见下文)。我不确定发生了什么或为什么这不起作用。
此外,如果我关闭自动映射并使用 Fluently 配置的映射,则表会成功生成。
这让我发疯了,我相信这可能是一个快速解决方案。有任何想法吗?
谢谢!
安东尼
fluent-nhibernate - 覆盖 Fluent NHibernate 自动映射
这是一个 Fluent NHibernate 新手问题,请耐心等待。
我有一组类,我正在对它应用自动映射功能。
但是我需要用唯一约束标记其中一种技术的属性之一。
在 Fluent Wiki 中,它说
有时需要对特定实体进行轻微更改,而不希望影响其他任何内容;您可以使用 with Override 方法来做到这一点。
.Override(map => {
map.HasMany(x => x.Products) .Cascade.All(); });
但我无法弄清楚将 .Override 方法应用于哪个对象。
现在,我有
AutoPersistenceModel returnModel = AutoMap.AssemblyOf()
但是 AutoPersistenceModel 对象没有 Override 方法。
有人可以给我一些简单的示例代码来引导我完成这个,或者指向一些带有一些示例的链接吗?
谢谢。
fluent-nhibernate - Fluent NHibernate 是否可以同时使用自动映射和模式生成?
我正在使用以下内容:
它本质上是 Fluent NHibernate wiki 中的内容的副本。但是,每当我运行这条线时,它都会抛出这个InnerException
:
我真的不确定问题是什么,所以我想知道 Fluent NHibernate 是否可以首先与模式生成一起进行自动映射。我想做的只是为 POCO 创建一个持久层,而无需查看数据库或摆弄任何表。
c# - 在 Fluent NHibernate 中,如何将自动映射类型与非自动映射类型结合起来?
现在,我正在将我的项目从ClassMap
为每个域实体手动定义的经典流畅的 nhibernate 风格切换到让自动映射器为我自动生成映射。但我想继续使用我已经以经典样式映射的类,直到我可以调整自动映射以匹配旧的经典映射。
唯一的问题是,当自动映射器遇到已经以经典的流利 nhibernate 样式映射的类时,流利的 nhibernate 崩溃。
这是我的AutoPersistenceModel
设置代码:
有谁可以帮我离开这里吗?
更多信息:
我还尝试了 fluent-nhibernate wiki here中提到的技术。唉,我仍然收到错误:Duplicate class/entity mapping
.
fluent-nhibernate - Fluent NHibernate 自动映射 - 如何创建多对多关系表?
只是想知道是否有人知道是否有一种方法可以使用某些属性自动创建多对多关系表?无需创建表,或将类映射为该关系表。
如果我添加属性 [ManyToMany(3,Class="DeploymentListUsers")] 我收到一个错误,即此类未映射到数据库。
NHibernate.MappingException:来自表用户的关联引用了未映射的类:
我不想自己定义类,也不想事先在数据库中创建表。
在 JAVA 中似乎是可能的,流畅的 NHibernate 是完全实现的休眠和 JPA 注释版本吗?
http://www.hiberbook.com/HiberBookWeb/learn.jsp?tutorial=19mappingmanytomanyrelationships
谢谢, 伊泰
fluent-nhibernate - 是否有“正常工作”的 Fluent NHibernate Automapping 示例项目?
我这周刚开始研究 NHibernate,并且很想在我当前的项目中使用 Automapping 方法。
我正在使用几天前下载的 Fluent NHibernate 1.0.0.594。
我在 NHibernate 源代码中找到了 Examples.FirstProject,它使用了旧样式的实体映射。作为 NHibernate 的介绍,这对我来说非常有价值,因为它开箱即用。
但是,我一直无法为 AutoMapping 找到类似的独立工作示例。Peter Bromberg发布了一个看起来不错的示例,但它似乎缺少一些重要的程序集。他一直在帮助我尝试解决问题,但还没有奏效。
接下来,我尝试修改 Examples.FirstProject 程序以使用 Automapping,但立即遇到了抛出异常的问题,这是我目前的经验水平无法理解的。
谁能给我指出一个已知可以使用最新 NHibernate 代码的 Automapping 示例项目?
fluent-nhibernate - Fluent NHibernate AutoMapping 在尝试提交列表时抛出“StaleStateException”<>
当 Order.OrderItems 属性(一个 IList)被提交时,以下代码将引发 StaleStateException 异常。例外的全文是:
NHibernate.dll 中发生了“NHibernate.StaleStateException”类型的未处理异常
附加信息:意外的行数:0;预期:1
我刚刚开始使用 NHibernate,这对我来说毫无意义。谁能解释什么是错的?
大部分代码都附在下面。抱歉,说了这么多,但我认为这比遗漏一些重要的东西要好。
如果我注释掉OrderItems = orderItems行,其他一切正常。
nhibernate - 你如何自动映射列表还是使用 Fluent NHibernate 的 float[]?
成功使示例程序运行后,我现在开始使用 Fluent NHibernate 进行实际工作 - 尝试在我的项目的类层次结构上使用 Automapping。
这是一个科学仪器应用程序,我正在映射的类有几个属性是浮点数组,例如
这些数组最多可以包含 500 个值。
我没想到 Automapping 可以在数组上工作,但无论如何都尝试过,起初取得了一些成功。每个数组都自动映射到一个 BLOB(使用 SQLite),这似乎是一个可行的解决方案。
当我尝试对包含数组的对象调用 SaveOrUpdate 时,第一个问题出现了 - 我得到了“No persister for float[]”异常。
所以我的下一个想法是将我所有的数组转换为 ILists,例如
但现在我得到:
因为 Automapping 可以处理复杂对象的列表,所以我从来没有想过它不能映射基本类型的列表。但是在进行了一些谷歌搜索以寻求解决方案之后,似乎就是这种情况。有些人似乎已经解决了这个问题,但是我看到的示例代码比我现在需要更多的 NHibernate 知识——我不明白。
问题:
1. 如何使用 Automapping 进行这项工作?
2. 另外,这个应用程序使用数组还是列表更好?
如有必要,我可以修改我的应用程序以使用其中任何一个(尽管我更喜欢列表)。
编辑:
我研究了Mapping Collection of Strings中的代码,我看到源代码中有设置字符串 IList 的测试代码,例如
so this must be possible using pure Automapping, but I've had zero luck getting anything to work, probably because I don't have the requisite knowlege of manually mapping with NHibernate.
Starting to think I'm going to have to hack this (by encoding the array of floats as a single string, or creating a class that contains a single float which I then aggregate into my lists), unless someone can tell me how to do it properly.
End Edit
Here's my CreateSessionFactory method, if that helps formulate a reply...