在 Fluent NHibernate 中使用鉴别器

2024-04-04

我正在尝试创建一个鉴别器列。该列将保存许多可用状态之一。就像我的代码将显示的那样,每个状态都有一个名称和背景颜色。每个状态共享相同的基类。

这是我的代码:

public class Item
{
    public virtual int Id { get; set; }
    public virtual Status ItemStatus { get; set; }
}

public abstract class Status
{
    private readonly int _id;
    public static readonly Status Foo = new FooStatus(1);
    public static readonly Status Bar = new BarStatus(2);

    public Status()
    {

    }

    protected Status(int id)
    {
        _id = id;
    }

    public virtual int Id { get { return _id; } }
    public abstract string Name { get; }
    public abstract string BackgroundColor { get; }
}

public class FooStatus : Status
{
    public FooStatus()
    {

    }

    public FooStatus(int id)
        : base(id)
    {

    }

    public override string Name
    {
        get { return "Foo Status"; }
    }

    public override string BackgroundColor
    {
        get { return "White"; }
    }
}

public class BarStatus : Status
{
    public BarStatus()
    {

    }

    public BarStatus(int id)
        : base(id)
    {

    }

    public override string Name
    {
        get { return "Bar Status"; }
    }

    public override string BackgroundColor
    {
        get { return "Black"; }
    }
}

这是我的映射:

public class ItemMap : ClassMap<Item>
{
    public ItemMap()
    {
        Id(x => x.Id).GeneratedBy.Identity();

        DiscriminateSubClassesOnColumn<int>("ItemStatus", 0).AlwaysSelectWithValue();
    }
}

本质上,我想要的是,如果我设置ItemStatus to Status.Foo那么ItemStatus列的值为 1。我现在所拥有的不会引发任何异常,但它总是插入ItemStatus as 0.

这是我正在使用的插入代码:

using (var session = sessionFactory.OpenSession())
using (var transaction = session.BeginTransaction())
{
    var item = new Item
    {
        ItemStatus = Status.Foo
    };
    session.Save(item);
    transaction.Commit();

    var firstItem = session.Get<Item>(1);
    Console.WriteLine(firstItem.ItemStatus.Name);
}

我可以在哪里使用 FNH 阅读有关此主题的内容?

在有人建议检查谷歌之前,我确实搜索了一些东西,但我找不到完整的例子。


Your SubclassMap看起来像这样:

public class FooStatusMap : SubclassMap<FooStatus>
{
    public FooStatusMap()
    {
        DiscriminatorValue(1);
    }
}

这被称为“每类层次结构表”,你是对的,它看起来并没有很多资源。

I believe如果你不打电话DiscriminatorValue in a SubclassMap,NHibernate 尝试通过查看被映射的子类的名称并查看它是否与鉴别器列中的值匹配来进行区分。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 Fluent NHibernate 中使用鉴别器 的相关文章

随机推荐

  • 在 .NET 中使用 RPC/编码的 SOAP Web 服务时出错

    我在调用 Web 服务方法时收到以下错误 无法将 System Xml XmlNode 类型的对象分配给 System String 类型的对象 Web 服务是 PHP 服务 我使用此处定义的 wsdl 文档中的 wsdl exe 创建了我
  • 从 C# 对象自动生成 javascript 对象模型

    寻找现有的 经过验证的解决方案来快速生成客户端JavaScript 对象模型代表一个现有的 C 对象 我想象有一个 T4 模板或其他一些方法 但我缺乏找到它的术语 我不是在讨论序列化以获取现有 C 对象实例的 JSON 表示形式或任何与反序
  • 如何将字符串转换为安全的 SQL 字符串?

    我正在从一堆文本文件生成一些 sql 插入语句 这些文本文件通常是用户输入数据 我想清理这些数据 这样就不会破坏插入语句 例如 在某些输入数据中 人们使用了 Don t 一词 don t中的 会导致sql语句认为字符串已经结束 从而导致错误
  • 如何正确使用 oembed 从 youtube 中提取拇指

    我的主页上有很多来自 YouTube 视频的点赞 我使用下面的这个函数从 youtube url 中抓取拇指 它运行速度很快 但它不适用于像 youtu be JSHDLSKL 这样的缩写形式的 url function get youtu
  • JSF 和 Facelets 文件的自动重新加载

    我在使用 JRebel Spring JSF Mojarra 2 0 3 和 WebLogic 10 3 热重载 Facelets 文件时遇到了一些问题 JRebel 成功重新加载 WebContent 下的常规 Java 类和 js cs
  • System.Diagnostics.Process.Start 奇怪的行为

    我正在用 C 编写一个应用程序来启动和监视其他应用程序 我使用 System Diagnostics Process 类启动应用程序 然后使用 Process Responding 属性每 100 毫秒轮询一次应用程序的状态来监视应用程序
  • 将双精度十进制转换为十六进制、二进制和八进制字符串

    是否有一个自定义或标准库可以与 Objective C 一起使用 将十进制浮点值转换为十六进制 二进制和八进制 NSString 我一直在四处寻找 但只能找到如何通过使用以下方法转换另一个方向 从其他方向转换为十进制 double resu
  • 数组排序不起作用

    我有一组对象正在尝试排序 但它似乎不起作用 数组中的某些对象具有orderNum我要排序的属性 但并不是所有的物体都具有这个属性 我想要带有以下内容的对象orderNum要排序到数组顶部位置的属性 这是我尝试过的小提琴 http jsfid
  • Android 材料设计复制工具栏面包屑示例

    我正在尝试复制面包屑示例 我已经将 TextView 添加到工具栏 但无法完全复制工具栏样式的字体 大小 颜色 并且无法让面包屑从屏幕左侧浮动 您将需要创建自己的面包屑视图并将其添加到工具栏中 也许基于现在已弃用的碎片面包屑 https d
  • React Native 的 panResponder 的 useState 的价值已经过时了吗?

    我需要读取的值useState in onPanResponderMove 页面加载时onPanResponderMove正确记录初始值0 但是当我点击之后TouchableOpacity增加foo the onPanResponderMo
  • 如何合并所有子目录中同名的文本文件?

    我有几个包含文件的文件夹 文件可以具有相同的名称 我想将文件连接到每个名称之一 提前致谢 EDIT 抱歉 您能给我看一下它的批处理文件吗 合并 bat echo off for every text file in the sub dirs
  • 是一个在给定上下文错误中无效的“方法”

    这是 Head First CSharp 第 113 页 的示例 我收到以下错误 错误 1 Guys Form1 joesCashLabel object System EventArgs 是一种 方法 在给定上下文中无效 c temp G
  • Instagram 的 GET/tags//media/recent 分页实际上是如何工作的?

    我正在尝试使用实时照片更新 http instagram com developer realtime 用于获取带有特定标签的所有图片的 API 因为此 API 的更新实际上只告诉您that新内容存在 但不存在 what是的 每当我收到某些
  • 同一命名空间中的包:无法在安装脚本中导入模块

    我很好奇下面的情况 假设我有两个名为project alpha and project bravo 都定义了顶级命名空间包mymeta 布局 project alpha gt mymeta gt init py gt project alp
  • NamedParameterJdbcTemplate - 从以下位置选择 *

    在 Spring 的 NamedParameterJdbcTemplate 中 如何使用 Spring 版本 3 1 x 执行 Select from Student 的查询以返回列表而不提供任何参数 根据http docs spring
  • C# ImageBox 在 MouseUp 上清除矩形

    我有一个面板 其中包含在运行时创建的多个图片框 用户将在任何图片框上创建一个矩形 所选部分将显示在预览图片框上 我已经使用下面的代码成功完成了上述操作 Question 我想在 mouseup 事件中清除选择矩形 使用无效但不起作用 从如何
  • Visual Studio 远程调试扩展性

    我正在尝试使用类似于以下的代码连接到远程计算机 Debugger2 db Debugger2 dte Debugger Transport trans db Transports Item Default Process2 proc2 Pr
  • 如何从源代码构建适用于 iOS 的 libssl.a?

    I have a project referenced to libSSL a in xcode 5 so I try to build it myself error message of make command is this 我做了
  • 如何将容器 div 及其所有内容缩放到特定大小?

    我创建了一个 100 浏览器 宽度的 HTML 页面 其中包含很多内容 内容在页面中是固定的 其大小均以像素和百分比为单位 现在我需要添加20 浏览器宽度的广告面板 并且想要将页面容器及其所有内容 包括文本 缩放至 80 就像所有网络浏览器
  • 在 Fluent NHibernate 中使用鉴别器

    我正在尝试创建一个鉴别器列 该列将保存许多可用状态之一 就像我的代码将显示的那样 每个状态都有一个名称和背景颜色 每个状态共享相同的基类 这是我的代码 public class Item public virtual int Id get