NHibernate - 向实体添加评论属性(使用加入存储)
Posted
技术标签:
【中文标题】NHibernate - 向实体添加评论属性(使用加入存储)【英文标题】:NHibernate - Add Comment Property to Entities (Store with Join) 【发布时间】:2013-04-01 14:13:39 【问题描述】:我有一个系统,我需要能够将评论字段添加到客户和位置模型,但我无法触及现有表的架构。但是,我可以添加一个评论表。我已经简化了这个例子。我们希望能够将此评论添加到更多模型中,它们都使用 Guid 作为 Id。
此现有系统是具有自己的数据访问层的第 3 方系统。
我们才刚刚开始接触 NHibernate。据我所知,它看起来像一个 Join 地图。
例子:
public class Customer
public Guid Id get; private set;
public string FirstName get; private set;
public string LastName get; private set;
public string Comment get; set;
public class Location
public Guid Id get; private set;
public string Name get; private set;
public string Address get; private set;
public string Comment get; set;
注意:我们确定我们希望 Comment 是一对一的关系,而不是一对多的关系。
如何配置一个单独的表,只捕获 Id 和 Comment?我正在寻找要使用的正确术语。我正在寻找带有 XML 的示例(如果可能的话,还有 Fluent 配置)。我想将所有对象的评论保留在一张表中。谢谢。
【问题讨论】:
【参考方案1】:如果您可以添加注释表(以及现有表中的相应键列),则流畅的映射看起来像
public class CustomerMap : ClassMap<Customer>
public CustomerMap()
//...other columns mappings
References(c=>c.Comment).Column("CommentId");
并为其他实体重复此操作。您也可以在那里设置所需的 fetch-mode(join) 和其他操作。我已经写了References
那里(多对一),但如果你需要一对一的映射,那差别不大
【讨论】:
一对一映射是什么样的? 将References
更改为HasOne
【参考方案2】:
如果您无法更改数据库架构,那么您的选择将非常有限。 也许,你可以使用映射来做到这一点。 看这里:
http://ayende.com/blog/3961/nhibernate-mapping-join
尝试在所有实体的映射中使用相同的列名。
【讨论】:
你知道有没有办法通过配置告诉系统主实体不可变但“连接”是可变的? @brun:什么意思?如果 na 实体不可变,那么它的任何部分都无法改变。 有一个我不想改变 Comment 属性的客户部分很好。我是否只是在上面的 C# 中显示的那些属性上使用私有“集”来强制执行? @brun:如果您不希望某个属性不被更新,您可以在映射中将其设置为 update="false"。我不确定我是否得到了你需要的东西。 :)以上是关于NHibernate - 向实体添加评论属性(使用加入存储)的主要内容,如果未能解决你的问题,请参考以下文章
通过 NHibernate 代码映射将 GUID 属性作为外键映射到其他实体