【问题标题】:NHibernate - Add Comment Property to Entities (Store with Join)NHibernate - 向实体添加评论属性(使用加入存储)
【发布时间】: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 配置)。我想将所有对象的评论保留在一张表中。谢谢。

【问题讨论】:

    标签: c# nhibernate orm fluent-nhibernate nhibernate-mapping


    【解决方案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"。我不确定我是否得到了你需要的东西。 :)
    猜你喜欢
    • 2012-02-13
    • 1970-01-01
    • 1970-01-01
    • 2021-10-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-14
    • 1970-01-01
    相关资源
    最近更新 更多