流畅的NHibernate - 将多行展平为一个实体

Bro*_*ski 5 nhibernate entity-relationship fluent-nhibernate automapping

我有一个我无法更改的数据库表,其中包含以下数据:

FooTable
Id     | EntityAUniqueId | EntityBUniqueId | EntityCUniqueId
============================================================
1      | A1              | B1              | C1
2      | A1              | B1              | C2
3      | A1              | B2              | C3
4      | A1              | B2              | C4
5      | A2              | B3              | C5
6      | A2              | B3              | C6
7      | A2              | B4              | C7
8      | A2              | B4              | C8
Run Code Online (Sandbox Code Playgroud)

我想将此映射到以下结构:

interface IEntityA
{
    string UniqueId { get; }
    IEnumerable<IEntityB> { get; }
}

interface IEntityB
{
    string UniqueId { get; }
    IEnumerable<IEntityC> { get; }
}

interface IEntityC
{
    string UniqueId { get; }
}

class EntityA : IEntityA { ... }
class EntityB : IEntityB { ... }
class EntityC : IEntityC { ... }
Run Code Online (Sandbox Code Playgroud)

上述数据将导致以下实体被拉出:

EnityA(A1)
  |-EnityB(B1)
  |   |-EntityC(C1)
  |   |-EntityC(C2)
  |-EnityB(B2)
      |-EntityC(C3)
      |-EntityC(C4)
EnityA(A2)
  |-EnityB(B3)
  |   |-EntityC(C5)
  |   |-EntityC(C6)
  |-EnityB(B4)
      |-EntityC(C7)
      |-EntityC(C8)
Run Code Online (Sandbox Code Playgroud)

目前我只需要写表不读.

我正在使用FluentNHibernate与AutoMapping和约定.

我开始走上组件的道路,但意识到这不是他们的目的.一种可能的解决方案是在表格上使用三个视图,但这会增加额外的问题,如果可能的话我想避免它,我不能帮助感觉框架中已经存在某些东西来处理这个问题.

如果界面混淆了答案,请随意从解决方案中省略它们.

Ale*_*lex 1

因此,您的表中的数据已非规范化。我不知道如何使用您请求的映射类型来处理它。我可以想到 2 个解决方案。

1) 在数据库中创建视图以规范化数据,并根据这些视图创建映射。类似的观点

ViewEntityA
-----------
IdColumn: EntityAUniqueId
AnyDataColumns

ViewEntityB
-----------
IdColumn: EntityBUniqueId
FkColumn: EntityAUniqueId
AnyDataColumns

ViewEntityC
-----------
IdColumn: EntityCUniqueId
FkColumn: EntityBUniqueId
AnyDataColumns
Run Code Online (Sandbox Code Playgroud)

然后,您可以编写视图插入/更新/删除触发逻辑(参考1参考2)来处理NHibernate更新。

2) 按原样映射表。在 C# 中手动映射到 .net 对象层次结构。更新所有数据库表,而不利用 NHibernate 的实体关系。