问题标签 [fluent-nhibernate-mapping]

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.

0 投票
2 回答
269 浏览

c# - Fluent NHibernate C#中的基本关系问题

我找不到这方面的例子。我试图对 Fluent NHibernate 有一个基本的了解,但就适当的教程而言,资源似乎相当稀缺。

我有一个这样的测试类:

像这样的另一个类:

我的映射到底应该是什么样子?

如何使用延迟或急切加载正确查询数据库才能执行此操作:

我觉得自己像个白痴……通常我可以按照文档进行操作,但是这种用法非常模糊。谁能给我指出一个合适的例子(或举一个)?

我直接从 Fluent NHibernate 网站使用最新的 Fluent NHibernate。

问候,

化学

0 投票
1 回答
285 浏览

hibernate - 在 Hibernate/NHibernate 中映射类继承的多对多关系

在最简化的版本中,这是我的问题 在此处输入图像描述

class B映射到表 B
class C映射到表 C

A 只是一个接口,没有映射到任何表。

如何定义many-to-manyD -> A 之间的多态 ( ) 关联

我正在NHibernate使用FluentMapping.

0 投票
1 回答
10439 浏览

fluent-nhibernate - CompositeId 导致无法编译映射文档错误

我正在尝试使用 CompositeId 映射到遗留系统。源数据库有一个复合主键,所以我不能使用正常的 this.Id 映射。

这是我尝试映射它:

当我尝试创建会话工厂时,此映射会导致错误:无法编译映射文档:(XmlDocument)

我尝试删除 CompositeId 映射并将其替换为:

错误随着该映射而消失,但我不能真正使用它,因为 AssemblyPartNumber 不是唯一的。

是否有不同的方法可以映射到具有复合主键的表?

谢谢,

马修麦克法兰

0 投票
1 回答
407 浏览

nhibernate - 使用流利的 nhibernate 映射引用的基类

我正在尝试映射一个如下所示的类层次结构:

我不想映射 A 类,因为它是抽象的,我知道我可以做到:

不映射 A 并将 A 的所有属性映射到 B 和 C 中。但我的问题是我还有另一个 D 类,如下所示:

现在,当我尝试使用流畅的 nhibernate 自动映射功能进行映射时,我收到一个错误,即 D 类引用了未映射的 A 类,尽管 A 类实际上是通过子类 B 和 C 映射的。

有谁知道如何解决这个问题?

0 投票
2 回答
1335 浏览

vb.net - Fluent NHibernate 没有将子行映射到集合属性(DB2 数据库)

背景:

我正在处理一个遗留的 DB2 数据库,所以我无法控制模式。我已经在这个网站上搜索了答案,但没有找到。我也搜索了谷歌并没有找到合适的答案。

这里描述的表都使用复合键。我有一个父表存储每个“案例”的资格信息。子表存储与案例相关的每个人的资格信息。子记录由 pin 号区分,以使它们仅在子表中唯一。

我正在使用 NHibernate v3.1 和 Fluent NHibernate v1.2,两者都是通过 NuGet 包获得的。使用 Fluent NHibernate 自动映射器功能映射实体。任何自定义映射都是在每个实体的映射覆盖方法中完成的。

要知道的另一件事是,这些表没有在 DB2 中定义的“主键”。它们只有“唯一键”,这是您在下面的复合键定义中看到的(参见代码)。

T0026_AG_ELIG 是父表的名称和对应的 POCO 类。
T0265_AG_IN_ELIG 是子表的名称和对应的 POCO 类。

问题:

问题是当我执行查询时,所有数据都被查询到,父记录成功映射到类,但是返回的子行没有映射到父类上的集合。NHibernate 确实为父数据和子数据生成查询。当我对数据库执行自己的查询时,条件的正确数据确实会返回。出于某种原因,子记录只是没有绑定到父 (T0026) 类的属性。

问题:

我需要做什么才能让从 T0265_AG_IN_ELIG 返回的多行映射到其相应的类并正确加载到父类 (T0026_AG_ELIG) 上的指定集合属性中?

父集合属性 (T0026_AG_ELIG):

父级映射覆盖 (T0026_AG_ELIG):

子级映射覆盖 (T0265_AG_IN_ELIG):

执行以下代码以执行查询:

0 投票
2 回答
2129 浏览

nhibernate - Nhibernate Has Many Insert 生成额外的更新(无反向)

我有一个包含两个子类列表的父类

映射是

每当我保存父对象时,我都会得到

除了设置关系Inverse以避免额外更新之外,还有其他方法吗?

0 投票
1 回答
1388 浏览

c# - Fluent NHibernate - 映射列表订购子表

我正在重构一个流畅的 nHibernate 映射,但我似乎无法弄清楚这一点。我想将具有类型的属性重新映射到子表,但如果可能的话List<decimal>使用单个属性。HasMany

现在我们有:Map(x => x.DecimalList); 这给了我们一个很好的类型varbinary(8000)

在我尝试将此移动到有序子表时,我尝试过:

这给了我关系,有两列:ParentIdAmount。唯一的问题是我还想在子表上放置一个 Order 或 Primary Key/ID 列,以确保我们无论如何都保留列表的顺序。

有没有办法添加一个强大的 int Primary Key 列和/或 Order 列,而不会将其分解为更复杂的子对象/映射?

0 投票
1 回答
2858 浏览

nhibernate - 使用 Fluent NHibernate、Oracle 10g 和 OracleClientConfiguration.Oracle10 映射 clob

我一直在尝试使用 Fluent NHibernate 1.2.0.712 针对 Oracle 10g 映射 clob 字段。我正在使用 System.Data 提供程序,因为它默认可用,并且由于以前的客户端问题而试图避免添加对 ODP.Net 的引用。

但是,当我尝试插入具有映射 clob 属性的实体时,出现错误:

ORA-01461: 只能绑定 LONG 值以插入 LONG 列

我尝试通过使用以下约定来解决此问题,并使用 [StringLength(4000)] 装饰适当的属性:

这没有用。

然后我使用“TEXT”、“CLOB”和“clob”值尝试了以下操作。都没有工作:

除了将 ODP 添加为提供程序之外,是否有人对此修复有进一步的建议?

0 投票
1 回答
1531 浏览

nhibernate - NHibernate 3.2 - 现在所有属性都需要“设置”方法吗?

我们最近将 Automapped FNH / NH 项目升级到 NH 3.2,但遇到了很多问题。

我们的对象模型中有很多只有“getter”的属性,例如

这过去可以正常工作,但现在我们得到“找不到属性的设置器”错误。

这很难找到,因为由于某种原因自动映射无法创建数据库表,导致在保存到数据库时出现“无持久性”错误 - 有关详细信息,请参阅内容。

这是因为LinFu 现在内置在NH 中了吗?我知道私人二传手不再工作,这似乎是一个类似的问题。

我们曾经使用 Castle,我真的很喜欢 NH 现在不需要所有其他 DLL,但如果它破坏了我们对象模型的很大一部分,则不需要。

关于如何解决这个问题的任何建议?

堆栈跟踪

FluentNHibernate.Cfg.FluentConfigurationException:创建 SessionFactory 时使用了无效或不完整的配置。检查 PotentialReasons 集合和 InnerException 了解更多详细信息。

---> NHibernate.PropertyNotFoundException: 在 NHibernate.Properties.BasicPropertyAccessor.GetSetter(Type type, String propertyName) at NHibernate.Mapping.Property.GetSetter(Type clazz) 在 NHibernate.Tuple.Entity.AbstractEntityTuplizer..ctor(EntityMetamodel entityMetamodel, PersistentClass mappingInfo) 在 NHibernate.Tuple.Entity.PocoEntityTuplizer..ctor(EntityMetamodel) 的 NHibernate.Tuple.Entity.PocoEntityTuplizer.BuildPropertySetter(Property mappedProperty, PersistentClass mappedEntity) NHibernate.Tuple.Entity.EntityEntityModeToTuplizerMapping..ctor(PersistentClass mappedEntity, EntityMetamodel em) 在 NHibernate.Tuple.Entity 的 entityMetamodel, PersistentClass mappedEntity)。NHibernate.Persister.Entity.AbstractEntityPersister 的 EntityMetamodel..ctor(PersistentClass persistentClass, ISessionFactoryImplementor sessionFactory) 在 NHibernate.Persister.Entity.JoinedSubclassEntityPersister..ctor(PersistentClass persistentClass, ICacheConcurrencyStrategy 缓存, ISessionFactoryImplementor factory, IMapping mapping) at NHibernate.Persister.PersisterFactory.CreateClassPersister(PersistentClass model, ICacheConcurrencyStrategy cache, ISessionFactoryImplementor factory, IMapping cfg) at NHibernate.Impl.SessionFactoryImpl..ctor(Configuration cfg, IMapping mapping, Settings settings, EventListeners listeners) at NHibernate.Cfg.配置。FluentNHibernate.Cfg.FluentConfiguration.BuildSessionFactory() 处的 BuildSessionFactory() --- 内部异常堆栈跟踪结束 --- 位于 C:\Bicw_Dev\Bic 中 BI_OverlordPackageCore.OfeDatabase.CreateSqliteSessionFactory() 的 FluentNHibernate.Cfg.FluentConfiguration.BuildSessionFactory() .Net\Private Projects\NHibernate\FNH 1.3 映射错误\OfeDatabase.cs:C:\Bicw_Dev\Bic.Net\Private Projects\NHibernate\FNH 1.3 映射错误\OfeDatabase.cs 中 BI_OverlordPackageCore.OfeDatabase.GetMainSession() 的第 192 行:C:\Bicw_Dev\Bic.Net\Private Projects\NHibernate\FNH 1.3 映射错误\OfeDatabase.cs 中 BI_OverlordPackageCore.OfeDatabase.Initialize(Assembly[] 程序集)的第 147 行:FNH_1._3_Mapping_Bug.Form1.button1_Click( C:\Bicw_Dev\Bic.Net\Private Projects\NHibernate\FNH 1 中的对象发送方,EventArgs e)。3 在 System.Windows.Forms.Button.OnClick(EventArgs e) 在 System.Windows.Forms.Button.OnMouseUp(MouseEventArgs) 的 System.Windows.Forms.Control.OnClick(EventArgs e) 映射 Bug\Form1.cs:line 23 mevent) 在 System.Windows.Forms.Control.WndProc(Message& m) 在 System.Windows.Forms.ButtonBase.WndProc(Message& m) 在 System.Windows.Forms.Control.WmMouseUp(Message& m, MouseButtons button, Int32 clicks)在 System.Windows.Forms.Button.WndProc(Message& m) 在 System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m) 在 System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m) 在 System.Windows .Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)OnClick(EventArgs e) 在 System.Windows.Forms.Button.OnClick(EventArgs e) 在 System.Windows.Forms.Button.OnMouseUp(MouseEventArgs 事件) 在 System.Windows.Forms.Control.WmMouseUp(Message& m, MouseButtons button, Int32 点击)在 System.Windows.Forms.ButtonBase.WndProc(Message& m) 的 System.Windows.Forms.Control.WndProc(Message& m) 在 System.Windows.Forms.Button.WndProc(Message& m) 在 System.Windows。 Forms.Control.ControlNativeWindow.OnMessage(Message& m) 在 System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m) 在 System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)OnClick(EventArgs e) 在 System.Windows.Forms.Button.OnClick(EventArgs e) 在 System.Windows.Forms.Button.OnMouseUp(MouseEventArgs 事件) 在 System.Windows.Forms.Control.WmMouseUp(Message& m, MouseButtons button, Int32 点击)在 System.Windows.Forms.ButtonBase.WndProc(Message& m) 的 System.Windows.Forms.Control.WndProc(Message& m) 在 System.Windows.Forms.Button.WndProc(Message& m) 在 System.Windows。 Forms.Control.ControlNativeWindow.OnMessage(Message& m) 在 System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m) 在 System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)WmMouseUp(Message& m, MouseButtons button, Int32 clicks) at System.Windows.Forms.Control.WndProc(Message& m) at System.Windows.Forms.ButtonBase.WndProc(Message& m) at System.Windows.Forms.Button.WndProc( Message& m) 在 System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m) 在 System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m) 在 System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32味精,IntPtr wparam,IntPtr lparam)WmMouseUp(Message& m, MouseButtons button, Int32 clicks) at System.Windows.Forms.Control.WndProc(Message& m) at System.Windows.Forms.ButtonBase.WndProc(Message& m) at System.Windows.Forms.Button.WndProc( Message& m) 在 System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m) 在 System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m) 在 System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32味精,IntPtr wparam,IntPtr lparam)Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m) at System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m) at System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)

0 投票
1 回答
106 浏览

nhibernate - 每个子类的表不起作用

有一个相当简单的(或者我会这么想!)问题开始让我恼火。

我有一组简单的类。

基类“Product”被其他类继承,Product 有一个字符串鉴别器列“ProductType”,它应该允许 NH 返回正确的子类。

下面是我正在研究的一个简单版本。

但是,如果我做一个简单的 Session.QueryOver.List() 得到执行的查询结果是

FROM 产品这个_

显然“泊位”不在 Product 表中,而是在“MotorHome”表中。

我确定我错过了一些相当简单的东西,但我一生都无法弄清楚我在这里做错了什么。

任何帮助将不胜感激。