【问题标题】:Fluent NHibernate mapping class within the entity class实体类内流畅的NHibernate映射类
【发布时间】:2012-09-05 01:34:15
【问题描述】:

我现在正在学习 Fluent NHibernate,并且有一个关于映射的问题。这不是问题,而是最佳实践问题。

我知道 Fluent NHibernate 有一个新的 fluent 映射,它需要一个新的类来映射实体类将使用的字段。我想知道,如果映射类直接链接到实体类(它将为实体类精确映射),最佳实践是否规定它们不能在同一个 .cs 文件中加入? 请注意这里不会有嵌套。

即:有 Product 和 ProductMap 类,它们都用于我的数据库中的 Product 表,所以我会将这两个类放在同一个 Product.cs 中,如下所示:

namespace Business.Entity
{
    public class Product
    {
        ...
    }

    public class ProductMap : ClassMap<Product>
    {
        ...
    }
}

如果这些类不应该在同一个文件中,您愿意解释一下原因吗?也许可以用真实的例子来解释一下?

提前致谢!

【问题讨论】:

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


    【解决方案1】:

    创建SessionFactory 实例时,您将传递一个类,该类告诉哪个程序集具有映射定义。然后,使用反射,它将遍历该程序集上继承自 ClassMap&lt;T&gt; 的所有类。

    也就是说,为了更快的初始化,最好让这个程序集尽可能轻,这意味着最好有一个只包含映射而不是类定义的程序集。

    AFAIK 这是唯一的区别。任何反馈将不胜感激。

    【讨论】:

      【解决方案2】:

      你应该尽可能地设计你的实体持久无知。

      这意味着你不应该让Product 派生自ClassMap&lt;Product&gt;。但这也意味着ProductMap 甚至不应该与您的实体在同一个项目中。

      通常,您将拥有一个包含映射的 DAL 项目和一个包含实体的域/业务项目

      【讨论】:

      • 我对这个 DAL/Business 分层很熟悉,将映射放在 DAL 层内更有意义,甚至分开考虑@Andre-Calil 提供的答案
      • Product 永远不会从ClassMap&lt;Product&gt; 继承,这没有任何意义。这里的重点是放置映射类的位置。看起来我们都同意它们应该在一个专有的类库中。
      【解决方案3】:

      您可以将这两个类保存在不同的文件中,甚至在不同的命名空间中。但是如果你是初学者,那么你可以将实体类保存在不同的文件中,并将类映射到同一命名空间内的不同文件中。

      /* Product.cs */
      namespace Business.Entity
      {
          public class Product
         {
          ...
         }
      }
      
      /* ProductMap.cs */
      namespace Business.Entity
      {
          public class ProductMap : ClassMap<Product>
          {
          ...
          }
      }
      

      【讨论】:

        猜你喜欢
        • 2012-05-14
        • 1970-01-01
        • 2023-03-14
        • 2010-11-22
        • 2010-12-29
        • 2011-07-01
        • 2013-11-14
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多