NHibernate,如何将属性映射到子选择

2024-01-28

我目前有一个遗留系统,专门使用 SP 来访问数据库。我的域对象看起来像这样:

public class User : EntityBase
{
    public virtual string Name {get;set;}
    public virtual string CreatedBy {get;set;}
    public virtual DateTime CreatedDate {get;set;}
}

我映射的 SP 看起来像这样:

CREATE PROCEDURE getUser
{
    @ID int
}
select
     Name
     ,(SELECT TOP 1 UserName FROM AuditTrail WHERE EntityID = [User].[ID] AND EntityName = 'User' AND AuditActionID = 1 ORDER BY DateStamp) AS CreatedBy
     ,(SELECT TOP 1 DateStamp FROM AuditTrail WHERE EntityID = [User].[ID] AND EntityName = 'User' AND AuditActionID = 1 ORDER BY DateStamp) AS CreatedDate
     FROM [User]
     WHERE [User].ID = @ID

因此,如您所见,审核信息与数据库上的实体本身分离,并且 CreatedBy/CreatedOn(和 ModifiedBy/ModifiedOn)存储在名为 AuditTrail 的单独表中。表中的 AuditActionID 字段指定它是否是创建/更新。

如何使用 NHibernate 设置此映射?我研究了 JOIN 但它没有给我通过附加值进行限制的选项(并且联接不是我想要的)。

另外,如果这在 Fluent NHibernate 中是可能的,那是一个额外的好处,但我很乐意尝试标准的 NHibernate 映射配置(如果它能让我到达那里)。

UPDATE:

我找到了一种方法来做到这一点,但我不喜欢。我设置了一个 SQLQuery 来读取数据并将其映射回一个对象。它有效,但我很想通过映射来做到这一点。是否有可能,因为我映射到的数据库中的“值”是子选择且不可编辑?

解决方案:

感谢 Diego 的提示,这是我找到的最终解决方案(在我的 ClassMap 文件中使用 Fluent NHibernate):

Map(x => x.CreatedBy).Formula("(SELECT TOP 1 AuditTrail.UserName FROM AuditTrail WHERE AuditTrail.EntityID = [ID] AND AuditTrail.EntityName = 'User' AND AuditTrail.AuditActionID = 1 ORDER BY AuditTrail.DateStamp)");
Map(x => x.CreatedDate).Formula("(SELECT TOP 1 AuditTrail.DateStamp FROM AuditTrail WHERE AuditTrail.EntityID = [ID] AND AuditTrail.EntityName = 'User' AND AuditTrail.AuditActionID = 1 ORDER BY AuditTrail.DateStamp)");

谢谢, 中号


您可以将 select 子句指定为formula为了您的财产。

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

NHibernate,如何将属性映射到子选择 的相关文章

  • 当使用 Ninject 管理会话的请求期间发生异常时,如何回滚 nHibernate 事务?

    我使用 nHibernate 进行 ORM 使用 Ninject 进行 IoC 我根据某个自定义范围 您可以假设是针对每个请求 创建 nHibernate 会话 我在激活时开始交易 我在停用时提交事务 问题是 如果在请求期间发生异常 我想回
  • 抽象 NHibernate 标准是否有价值?

    我对 NHibernate 相当陌生 我见过的大多数示例都在基础上添加了一些抽象层Criterion or DetachedCriterion类 在简单的情况下 它是某种Query类可能看起来像这样 public class Query
  • 将 Hibernate linq 查询转换为 HQL

    我知道 IQueryable 无法序列化 这意味着查询无法序列化 发送到 Web 服务 反序列化 查询然后发回 我想知道是否可以将 hibernate linq 查询转换为 hql 以通过网络发送 我还缺少另一条路线吗 我想我已经看到 AD
  • C# 泛型 - 可以创建具有 n 个泛型类型的方法..?

    我认为这是不可能的 但这里 我想添加可以处理 n 个泛型的方法 例如 bool
  • NHibernate 反射优化器 - 它有什么作用?

    我发现每当我禁用 nhibernate 反射优化器时 初始化会话工厂的速度就会大大加快 这对于测试目的非常有用
  • 映射同一类中的两个引用,但引用类具有复合键

    我有以下数据库表 为了清楚起见 这些表已缩写 CREATE TABLE dbo prod uom prod id dbo uid NOT NULL Primary key uom type numeric 9 0 NOT NULL Prim
  • 为什么 NHibernate 在选择时删除然后插入复合元素?

    有人可以向我解释一下关于 NHibernate 如何处理复合元素的这个小谜团吗 我的课程看起来像这样 public class Blog public virtual int Id get private set public virtua
  • Nhibernate ICriteria 和在查询中使用 Lambda 表达式

    你好 我是 NHibernate 的新手 我有点困惑 假设我们有一个product桌子 让product表有 2 列价格1 和价格2 然后我可以通过 HQL 查询映射的产品实体 如下所示 string queryString from pr
  • NHibernate 表更新事件

    我有这个表映射 我认为细节并不重要 WithTable COPACKER FACILITY Id x gt x FacilityNumber FACILITY NUM GeneratedBy Sequence FACSEQ Map x gt
  • 软删除 Nibernate

    我想对我的数据库表进行软删除 我应用了以下语句 如此处所述http nhibernate info blog 2008 09 06 soft deletes html http nhibernate info blog 2008 09 06
  • 您会将什么放入存储库类(数据访问层)的单元测试中?

    我想为我的数据访问层编写一个单元测试 以确保其中的一切正常工作 问题是 我应该把什么样的东西放入测试中 DAL 是静态的Repository隐藏底层 Fluent NHibernate 并通过一个公开的东西向公众公开的类IQueryable
  • Fluent NHibernate 一对一映射

    我很难利用 Fluent NHibernate 的 HasOne 映射 基本上 A 类在 B 类中可以有匹配的 只有一条或没有 记录 请帮助定义关系的 AMap 和 BMap 类 谢谢 public class A public virtu
  • 覆盖默认的 Fluent NHibernate 列映射

    我正在尝试找到更改 Fluent NHibernate 自动映射行为的语法 我将如何修改下面的代码来映 射UserId属性到名为用户标识符 举个例子 public class MyTypeMap ClassMap
  • NHibernate 中具有不同类型答案的问题

    我正在尝试找到一个问卷问题的简洁解决方案 假设我有一个Questionnaire类有一个集合Answers e g public class Questionnaire public virtual ISet
  • NHibernate 具有多个数据库和事务

    我们在理解如何最好地使用 NHibernate 时遇到了一些问题 我们通常拥有相对大量 就表数量而言 的 SQL Server 数据库 而不是一个包含大量对象的数据库 我们正在研究处理多个会话工厂的各种选项 并且可能已经控制住了这一点 但是
  • nHibernate + wcf + Isession

    我有一个包含 3 个项目的 C 解决方案 数据 WCF 和 UI 第一个是与数据库对话的类库 它通过第二个项目公开 该项目的类型为 WCF 服务库 原因是它将在第三个项目 称为 UI 的 Asp net 应用程序 作为指向 dll 的简单
  • Fluent NHibernate - 将属性映射到连接表上的列

    我有几张桌子 例如 产品 Id 名称 制造商 ID 制造商 ID 名称 我希望能够在我的产品对象上包含ManufacturerName 而不是当我只需要名称时必须加载整个制造商行 我的产品地图看起来像 Table Product Id x
  • 为什么我的 NHibernate 包集合没有动态设置子项的“父 ID”?

    我有一个新对象 其中包含一些作为 IList 属性的新对象的集合 我通过sql探查器看到正在执行两个插入查询 一个用于父级 它具有新的guid id 另一个用于子级 但是 引用父级的子级上的外键是一个空guid 这是我在父级上的映射
  • Fluent NHibernate 日期时间 UTC

    我想创建一个流畅的 nhibernate 映射来通过以下方式映射 DateTime 字段 保存时 保存 UTC 值 读取时 调整为本地时区值 实现此映射的最佳方法是什么 就我个人而言 我会将日期存储在 UTC 格式的对象中 然后在读 写时在
  • nHibernate 3 - Left Join re-Linq 解决方案

    我正在尝试使用 nHibernate 3 运行下面的 Linq 查询 var items from c in session Query

随机推荐

  • 图像不会出现在闪亮应用程序的 www 文件夹中

    我正在遵循上一个问题中的代码 R Shiny 将图片添加到带有文本的流体行中的框 https stackoverflow com questions 44279773 r shiny add picture to box in fluid
  • 让 Fortran 中的函数返回一个可以放置在赋值左侧的引用

    正如标题所述 我想要directly修改我通过从函数检索的指针访问的数据 函数返回的引用出现在 l h s 上 赋值 在 C 中没有问题 但 Fortran 中的以下最小示例会出错 module test mod implicit none
  • NHibernate SysCache 是否可以在非 Web 应用程序中工作?

    我知道 SysCache 在底层使用 ASP 缓存 但由于我不知道 ASP 缓存的实现 以及它是否依赖于 IIS 我想知道 SysCache 是否可以在非 Web 应用程序中工作 例如Windows 服务 激活它并使用 NHprofiler
  • 我们如何在不下载 EXSLT 源代码的情况下使用 EXSLT?

    XSLTSL http xsltsl sourceforge net id1954375似乎声称我们可以使用 EXSLT 而无需下载其源代码 直接从图书馆网站导入或包含主样式表或您希望使用的样式表模块 http xsltsl sourcef
  • 子查询未连接到主查询

    下面的查询用于从数据库中检索记录以在报告中显示 但 SENOKO AND EUNOS 专栏显示复制每行总计 这似乎是子查询未连接到主查询导致没有进行过滤 SELECT whbal customer customer imp license
  • 了解 OpenMP 有关 fork 的缺点

    我想了解它们在这里的意思 为什么这个程序会 挂起 From https bisqwit iki fi story howto openmp https bisqwit iki fi story howto openmp OpenMP 和fo
  • 如何使用 Xcode 5 构建 iOS 6? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我已经下载了新的 Xcode 5 0 但我想为 iOS 6 构建一个应用程序 我怎样才能从 Xcode 5 0 做到这一点 或者我是否
  • AVPlayerLayer 作为 SCNMaterial 未渲染,音频播放正常

    我正在尝试使用 AVPlayerLayer 作为要分配给 SCNSphere 的 SCNMaterial 基于 https developer apple com library mac samplecode SceneKit Slides
  • 如何在 Android 上使用 .p12 证书?

    如何在 Android 上使用 p12 证书 我尝试将其添加到Menu Settings Location和安全 当我执行此操作时 证书会从 SD 卡中消失 但是当我访问需要 p12 证书的网站时 我只会收到连接错误 证书 密码和 URL
  • 用平均值替换值

    我有一个数据框如下 Col1 Price 1 Plastic 50 2 Metal 100 3 Plastic 40 我想用 Price 中的值替换 Col1 中的值 所以我得到 Col1 Price 1 45 50 2 100 100 3
  • SwiftUI 中的选取器适用于 ForEach 的一个版本,但不适用于另一个版本 - 错误还是预期行为?

    看哪两个拾取器 第一个 当未注释时 第二个注释 不起作用 当我更改房间时 Text 不会更新 但此处显示的代码 带有第二个选择器 却可以 唯一的区别在于内容封闭 为什么我创建内容的方式会影响绑定 这是错误还是预期行为 struct Cont
  • 模板专业化中的额外方法

    我正在尝试编写一个带有一些方法 运算符等的模板类 现在 当该类是特定类型时 我希望有额外的附加方法 特别适合该类型 而这些方法不适用于任何其他类型 我不想将所有代码复制到新类中 Example template
  • 使用不同单位类型进行测量的最佳方法

    Context 我正在编写一个应用程序 我想在其中显示每个菜单项的营养成分 我希望能够灵活地使用Measurement 类进行转换 Problem 问题是卡路里是在Measurement 中测量的 而蛋白质等其他属性是在Measuremen
  • iOS 中的 UITextView 中未显示笑脸(表情符号)?

    我已将所有 uni codes 表情符号字符 存储在 iphone 支持的 plist 中 当我直接写为 IBAction sendButtonSelected id sender NSMutableArray emoticonsArray
  • Document.NewPage() 不添加新页面

    我正在尝试向 pdf 文档添加新页面 但由于某种原因 这种情况没有发生 也许我的另一个问题https stackoverflow com questions 11428878 itextsharp splitlate not working
  • PWA - 清单属性“display”:“standalone”在 Android 上不起作用

    我注意到我的 PWA 的行为非常奇怪 我可以在 Windows 上以 独立 模式启动它 但是当我尝试在 Android 设备上执行相同操作时 它会忽略 独立 值并在 Chrome 中打开网址 Android 7 0 Chrome Andro
  • 在java 8中将日期转换为EST

    我正在尝试将日期转换为以下时区 但结果不符合预期 我得到的要求是例如从PMST to EST输出应该少2小时 PMST 新标准时间 谷草转氨酶 美东时间 国家标准时间 MST 太平洋标准时间 农业科学技术 哈斯特 String inputD
  • 如何在单个选项卡中显示新片段?

    我正在创建三个选项卡 每个选项卡包含一个片段 现在我想用同一选项卡中的新片段替换第一个选项卡的片段 如何在选项卡保持不变的情况下做到这一点 我的代码 Tab Widget java public class Tab Widget exten
  • R可以用于GIS吗? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我想创建一些 GIS 绘图 我想知道 R 是否可以用于此目的 以下是一些与我想要制作的概念相似的绘图示例 美国的温度图 或等高线图 颜
  • NHibernate,如何将属性映射到子选择

    我目前有一个遗留系统 专门使用 SP 来访问数据库 我的域对象看起来像这样 public class User EntityBase public virtual string Name get set public virtual str