将多个鉴别器值映射到 NHibernate 中的单个默认类

发布于 2024-09-14 10:24:57 字数 948 浏览 1 评论 0原文

我有一个包含数据的现有 RoleType 表。我正在尝试使用 每个类层次结构的表

<class name="IRoleType" table="RoleType">

  <id name="Id" column="RoleID">
    <generator class="native" />
  </id>

  <discriminator column="RoleID" />    

  <property name="Description" column="Description" />
  <!-- ... more properties ... -->

  <subclass name="RoleA" discriminator-value="1" />
  <subclass name="RoleB" discriminator-value="4" />
  <subclass name="RoleC" discriminator-value="7" />
</class>

这里,IRoleType是一个接口,具有实现者RoleARoleBRoleC。这有效。但问题是 -

该表包含具有“额外”鉴别器值 (2,3,5,6) 的行,这些行未映射到持久类。这些值在域中已被弃用,因此为每个值创建持久类没有用。但我们也无法从数据库中删除它们。

有没有办法将这些额外的行映射到单个“默认”类?如果没有,我还能如何解决这个问题?

谢谢!

I have an existing RoleType table with data. I am trying to map this table in NHibernate using Table per class hierarchy:

<class name="IRoleType" table="RoleType">

  <id name="Id" column="RoleID">
    <generator class="native" />
  </id>

  <discriminator column="RoleID" />    

  <property name="Description" column="Description" />
  <!-- ... more properties ... -->

  <subclass name="RoleA" discriminator-value="1" />
  <subclass name="RoleB" discriminator-value="4" />
  <subclass name="RoleC" discriminator-value="7" />
</class>

Here, IRoleType is an interface, with implementors RoleA, RoleB and RoleC. This works. But here's the problem -

The table contains rows with "extra" discriminator values (2,3,5,6) that are not mapped to a persistent class. These values are deprecated in the domain, so its not useful to create persistent class for each. But we also cannot delete them from the database.

Is there a way to map these extra rows to a single "default" class? If not, how else can I solve this problem?

Thanks!

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

牵强ㄟ 2024-09-21 10:24:57

您可以通过将这些值映射到单个值来完成此操作。例子:

<discriminator
    formula="case when RoleID in (2,3,5,6) then 0 else RoleId end" />    
<subclass name="RoleA" discriminator-value="1" />
<subclass name="RoleB" discriminator-value="4" />
<subclass name="RoleC" discriminator-value="7" />
<subclass name="DefaultRole" discriminator-value="0" />

You can do this by mapping those values to a single one. Example:

<discriminator
    formula="case when RoleID in (2,3,5,6) then 0 else RoleId end" />    
<subclass name="RoleA" discriminator-value="1" />
<subclass name="RoleB" discriminator-value="4" />
<subclass name="RoleC" discriminator-value="7" />
<subclass name="DefaultRole" discriminator-value="0" />
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文