Fluent NHibernate - 如何将外键列映射为属性

2024-02-15

我确信这是一个简单的问题,但请考虑以下问题: 我对公司和部门之间的参考如下:

public class Company {
    public Guid ID { get; set; }
    public Sector Sector { get; set; }
    public Guid SectorID { get; set; }
}

public class Sector {
    public Guid ID { get; set; }
    public string Name { get; set; }
}

好的。我想要的是在我去之后填充 Company 对象的 SectorID:

(new Company()).Sector = new Sector() { Name="asdf" }

并进行冲洗。

我使用的映射会在数据库中的 Company 表中创建一个名为 Sector_Id 的附加列,但这不能作为 Company 上的属性使用。我想要填充 SectorID 属性。

我当前在 CompanyMap 中使用的映射是

References(c => c.Sector).Cascade.All();

有人有什么想法吗?


感谢您的答复。 可悲的是,如果我执行第二个选项(将列的列名设置为与属性相同,或者设置Map(x => x.SectorID, "Sector_Id")然后我得到错误:

System.IndexOutOfRangeException:此 SqlParameterCollection 的索引 7 无效,且 Count=7。

我可能必须执行第一个选项,但我担心当您调用 SectorID get 时会触发额外的查询,因为它将扇区本身从数据库中获取(除非它是急切加载的,这有点麻烦)。

我很惊讶这个问题没有一个简单的答案。


哇! 如果我使用

public virtual Guid SectorID
{
    get { return Sector.ID;
}   

那么 nhibernate 足够聪明,知道 Organization 查询中的 Sector_id 列实际上与 Sector.ID 相同,并且它在幕后返回该列。即使您延迟加载,它也不会发送额外的查询。我很佩服!


作为后续...似乎 hibernate 并没有真正编写为能够映射对象中的外键列。尽管这在 Web 前端可能有点麻烦,但这是有道理的,因为这实际上是一个持久性问题,而不是一个对象问题。 我正在使用 asp.net MVC 并编写了一个自定义模型绑定器,它将采用名称为 Contact(而不是 ContactID)的输入框,使用 texbox 中的 ID 新建一个新联系人,然后将其应用到模型的属性。这解决了网络前端下拉列表的问题。如果有人感兴趣,将发布代码。


使用公式属性可以轻松完成此操作。

public class Company {
  public virtual Guid Id { get; set; }
  public virtual Guid? SectorId { get; set; }
  public virtual Sector Sector { get; set; }
}

public class CompanyMap : ClassMap<Company> {
  public CompanyMap() {
    Id(x => x.Id); // Maps to a column named "Id"
    References(x => x.Sector); // Maps to a column named "Sector_id", unless you change the NHibernate default mapping rules.
    Map(x => x.SectorId).Formula("[Sector_id]");
  }    
}

这应该完全符合您的要求。当。。。的时候Company是新的,SectorId将为空;什么时候Company从数据库中获取,SectorId将填充给定的公式值。这SectorId作为一个属性公开,这使得它非常适合处理网络下拉菜单等。保存时,您仍然需要绑定“真实”关联。假如说SectorId以某种形式被选择...

using (var txn = session.BeginTransaction()) {
  // Set the FK reference.
  company.Sector = session.Load<Sector>(company.SectorId);
  // Save the new record.
  session.Save(company);
  // Commit the transaction.
  txn.Commit();
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Fluent NHibernate - 如何将外键列映射为属性 的相关文章

  • 如何使用 Fluent NHibernate 自动映射来映射字典?

    我有一个像这样的实体 public class Land public virtual IDictionary
  • NHibernate - 无法延迟初始化角色集合

    我有以下看似简单的场景 但我对 NHibernate 仍然很陌生 当尝试在我的控制器上加载以下模型以进行编辑操作时 控制器的编辑操作 public ActionResult Edit Guid id return View reposito
  • 我应该检查代码中的数据库约束还是应该捕获数据库抛出的异常

    我有一个将数据保存到名为 作业 的表中的应用程序 Jobs 表有一个名为 Name 的列 该列具有 UNIQUE 约束 名称列不是主键 我想知道在尝试保存 更新新条目之前是否应该自己检查重复条目 或者最好等待数据访问层抛出异常 如果这个应用
  • 如何在 NHibernate 中使用 READPAST 提示?

    有什么办法可以让 NHibernate 使用吗the READPAST hint https learn microsoft com en us sql t sql queries hints transact sql table从 SQL
  • NHibernate代理异常

    我是新 NHibernate 我正在编写一个简单的应用程序 其中的客户类包含 id 和名称 并使用 nhibernate 将对象存储到数据库中 但我得到以下信息 未配置 ProxyFactoryFactory 使用可用的 NHibernat
  • 在 MVC 应用程序中配置 NHibernate 二级缓存

    我有一个使用 NHibernate 的 MVC3 应用程序 一切都很顺利 直到我开始尝试添加二级缓存 浏览网页几个小时后 我终于找到了我认为正确的 dll NHibernate Caches SysCache2 dll 并将其添加到我的项目
  • NHibernate Criteria API 是否支持集合属性的投影?

    我需要使用条件 API 复制以下工作 HQL 查询 session CreateQuery select c from Parent p inner join p Children c where p Id 9 and c Id 33 Se
  • NHibernate:级联保存到子级不会插入

    我有一个像这样的双向关联 public class Parent public int ParentId get set other properties public IEnumerable
  • 在nhibernate中设置聚集索引

    我试图在 nhibernate 中定义一个不是 id 的属性作为聚集索引 但我发现没有办法做到这一点 谁能给我指点一下这是如何完成的 或者它是当前在 nhibernate 中不可用的东西 提前致谢 您可以使用
  • 保存时的 NHibernate FlushMode

    我已将 NHibernate 会话上的 FlushMode 属性设置为 FlushMode Never 但是当我调用 session Save User 时 无论如何都会调用数据库 这是应该如何工作的吗 我认为在我调用 Flush 之前它不
  • Sql 2008 文件流与 NHibernate

    我试图在 sql server 2008 中使用 Filestream 来存储用户上传的图像 我的问题是NHibernate不会出错 但它也不会将数据保存到数据库中 没有创建记录 下面的 Image 类是一个自定义类 不要与 System
  • NHibernate 将多个表映射到一个类

    在我的旧数据库中 我遇到这样的情况 TableA id A PK cod A TableB id B PK cod B id A FK TableC id C PK cod C id B FK 由于多种原因 我需要将这些表映射到单个类中 本
  • NHibernate:查找脏集合

    我知道怎么做查找脏属性 http nhforge org wikis howtonh finding dirty properties in nhibernate aspx使用NHibernate 但它似乎不适用于集合 即找出是否已在集合中
  • NHibernate.Linq 类似

    如何使用 NHibernate Linq 生成此查询 WHERE this Name LIKE p0 p0 test Notice NO wild card 请注意 这不是 Linq To Sql 或实体框架 这就是 NHibernate
  • NHibernate:QueryOver<> 帮助

    我刚刚开始使用 NHibernate 在运行更复杂的查询时遇到了麻烦 我有带有附加标签列表的实体 用户将提供两个标签列表 包括和排除 我需要找到具有所有包含标签的所有实体 并排除在排除列表中具有任何标签的任何实体 下面是我的第一个努力 这显
  • NHibernate双向一对一映射问题

    当尝试在 NHibernate 中创建双向一对一映射时 我发现我无法递归地获得对象的引用 例如 假设我之间有一对一的关系Person and Address 然后执行以下代码后 class Person public Address Add
  • Hibernate 乐观锁..它是如何工作的?

    我正在阅读下面关于休眠乐观锁定的博客 我打算将它与休眠一起使用 但是 我有一个担忧 我们有java代码和c 代码 都连接到一个数据库 虽然java代码可以使用hibernate来实现乐观锁定 但我想让c 代码做同样的事情 此外 C 代码正在
  • NHibernate 二级缓存与 NHibernate Linq Provider 1.0

    如何使用 NHibernate Linq Provider 1 0 启用 NHibernate 二级缓存 二级缓存似乎仅适用于 ICriteria 使用 是的 我终于解决了这个问题 public IQuerable
  • NHibernate - 更新带有触发器的表会导致错误 - 意外行计数:2;预计:1

    因此 我尝试使用 NHibernate 更新 MS SQL 2005 数据库中的对象 请记住 这是许多实时系统中使用的旧数据库 我无法删除触发器 当我的数据提供程序尝试 SaveOrUpdate 一行时 我得到两个返回 一个用于实际更新 一
  • NHibernate、数据绑定到 DataGridView、延迟加载和会话管理 - 需要建议

    我的主应用程序窗体 WinForms 有一个 DataGridView 它使用 DataBinding 和 Fluent NHibernate 显示 SQLite 数据库中的数据 该表单在应用程序运行的整个过程中都是打开的 出于性能原因 我

随机推荐

  • 路由前的角度动画

    在我当前的项目中 我试图摆脱路由时跳过的 Angular 动画 在我的模板中 我有不同的 小部件 mat card在 css grid 布局中 我想让它平滑地出现和消失 我的子组件中的动画 路线指向的 看起来像 animations tri
  • `JTableHeader` 可以跨越多个列吗?

    我花了很长时间寻找这个 但我只找到了GroupableHeader代码 我需要 2 列中的 2 列上有一个标题JTable 如果不使用臭名昭著的方法 如何才能做到这一点 GroupableHeader 同时保持 JTableHeader 的
  • 如何在 R 中引用查找表将两个 data.frame 合并在一起

    我正在尝试合并两个data frames一起 基于每个中的公共列名称称为series id 这是我的合并语句 merge test growth series LUT test growth series by intersect seri
  • 如何通过链接描述文件将符号放置在特定地址处?

    这是关于 GNU Linker 的 我有一个 可以说 名为的变量myVar 现在我希望我的变量被放置在内存中的某个地址 我使用的编译器有一个 attribute blablabla 这样就可以了 不过我决定使用链接描述文件 从现在开始 我设
  • ReentrantReadWriteLock 中的公平锁定

    B Goetz 所著的 Java Concurrency In Practice 中 第 13 5 节说道 在 Java 5 0 中 读锁的行为更像是信号量而不是锁 仅维护活跃读者的数量 而不维护他们的身份 Java 6 中的行为已更改 以
  • 中断安全 FIFO 中的 DMB 指令

    相关这个线程 https stackoverflow com q 50800118 1488067 我有一个 FIFO 它应该可以跨 Cortex M4 上的不同中断工作 头部索引必须是 由以下人员原子编写 修改 多个中断 不是线程 通过单
  • 如何在 MVC 中创建国家和州/省的选择列表

    嗨 我是 MVC 甚至 asp 的新手 我想在 MVC 中创建一个表单 在一些示例的帮助下 我可以创建文本框 但我现在不明白如何创建选择列表 我尝试搜索许多在 MVC 中实现选择列表的示例 但我无法理解 我有一个表单 一半用 HTML 编码
  • C# 是否允许使用双分号 ; ;如果可以的话,有什么特殊的方法吗?

    我正在编写一条语句并且它可以编译 但编译器 VS 从未告诉我我放置了两次分号 这意味着在 ASP NET MVC 3 中 return Json mydata return Json mydata 两者都可以编译 但第一个在设计模式上是错误
  • Retrofit 仅在第一次给出 EOFException

    我第一次在我的 Android 项目中使用框架 Retrofit 它处理与后端的通信 现在最奇怪的部分是 在 Android 4 4 上 一切都像魅力一样 在下面的每个版本上 我得到一个 RetrofitError 类型 java io E
  • Android Studio:如何将我的 .aar 库链接到多个项目?

    我有一个在多个项目中使用的库 每次更新 和重建 此库时 我不想将 aar 复制并粘贴到使用此库的每个项目中 实现这一目标最方便 最有效的方法是什么 注意 我在 Mac OSX 上运行 Android Studio 1 0 RC2 将您的 A
  • 从 Lock() 内调用 UI 线程上的方法

    我有两种方法 MethodA MethodB MethodB必须在 UI 线程上运行 我需要他们在不允许的情况下一个接一个地运行MethodC在他们之间奔跑 MethodC当用户单击一个可爱的小按钮时调用 我做了什么来确保这是一个Lock围
  • 像在 PHP 中那样获取 $_GET,但在 Visual Basic 中?

    我有一个名为 WebBrowser1 的网络浏览器 我希望能够像在 PHP 中那样检测 GET 并将其放在 Textlabel 中 就像网址是 www example com page php myget true Visual Basic
  • 将 NOT_NULL 约束添加到 SQL 列

    我正在尝试使用以下命令将 NOT NULL 约束添加到 SQL h2 数据库中的列 ALTER TABLE CHARACTERS ADD CONSTRAINT nn PID NOT NULL PLAYER ID 这遵循我发现的模式here
  • 寻找有关如何使用 PHP 构建私人消息系统的教程 [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 正在寻找有关如何使用 PHP 构建安全的私人消息传递系统的教程 非常感谢 到目前为止我一直在关注这个http www astahost c
  • Laravel 5.2 迁移:无法添加 char 数据类型的外键

    我正在尝试创建一个char 数据类型的可为空外键 当我运行迁移命令时 我收到以下错误 我不确定我哪里做错了 Illuminate Database QueryException SQLSTATE HY000 一般错误 1215 无法添加外键
  • 显示 ContextMenuStrip 但不在任务栏中显示

    我发现 当我执行 contextmenustrip 右键单击菜单 的 show 方法时 如果该位置超出其所属表单的位置 它也会显示在任务栏上 我正在尝试为单击通知图标时创建一个右键单击菜单 但由于菜单悬停在系统托盘上方而不是在表单内 因为右
  • 在 wagtail 中批量上传和创建包含图像的页面(迁移)

    我正在使用 wagtail 创建一个网站来替换某人现有的 weebly 网站 重新创建数百个页面实例并上传每个页面的每个图像需要花费几个小时 我已经有了我需要的页面模型 并且我的网站看起来很像 wagtail 文档中的入门教程 我想知道如何
  • ASP.NET WebApi 与 MVC? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 使用 ASP NET MVC 控制器 您可以以不同的格式公开数据 AspNetWebAPI 是专门为创建 API 而设计的 但我可以使
  • 使用 simple-build-tool (sbt) 和 IntelliJ 调试 Scala 代码

    使用 IntelliJ 的内置调试器调试 sbt 管理的 Scala 代码的最简单方法是什么 文档来自来自 sbt 的 google 代码站点的 RunningSbt http code google com p simple build
  • Fluent NHibernate - 如何将外键列映射为属性

    我确信这是一个简单的问题 但请考虑以下问题 我对公司和部门之间的参考如下 public class Company public Guid ID get set public Sector Sector get set public Gui