如何在 Fluent NHibernate 中创建基实体和基类映射

Posted

技术标签:

【中文标题】如何在 Fluent NHibernate 中创建基实体和基类映射【英文标题】:How to create base entity and base class map in Fluent NHibernate 【发布时间】:2016-04-10 17:16:46 【问题描述】:

我在所有表中都有公共列“Id、IsActive、CreateDate”。现在我想在我的基本实体中移动“Id,IsActive,CreateDate”,并且还想创建基本映射。如何在 Fluent NHibernate 中实现这一点?

【问题讨论】:

【参考方案1】:

您可以像这样创建基本映射:

public class BaseMap<T> : ClassMap<T> where T : Address

    public BaseMap()
    
        Id(x => x.Id);
        Map(x => x.IsActive);
        Map(x => x.CreateDate);
    


public class SomeEntityMap: BaseMap<SomeEntity>

    public CustomerAddressMap()
    
        Table("SomeTable");
        Map(x => x.SomeProperty);
    


public class Entity

   public virtual Guid Id  get; set; 
   public virtual bool IsActive  get; set; 
   public virtual DateTime CreateDate  get; set; 


public class SomeEntity : Entity

   public virtual string SomeProperty  get; set; 

【讨论】:

但是我放置公共属性的基本实体在哪里? 您必须创建它,但从您上面的评论来看,您似乎已经创建了具有这些属性的基本实体。 @ZeeshanMehmood 我已经编辑了我的解决方案,使其更适合您的示例 根据我的研究,最佳实践表明基本实体应该是抽象的,并且必须覆盖 Equals 和 GetHashCode 方法。同样在基类映射中,您说“where T:Address”,但“Address”没有任何类。 哈哈。这是您问题的正确答案。您在任何地方都没有询问如何使用 nhibernate 最佳实践创建基类。即使你这样做了,我怀疑你会得到答案。你必须在网上做一些研究,找出最适合你的方法。

以上是关于如何在 Fluent NHibernate 中创建基实体和基类映射的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Fluent NHibernate 中创建基实体和基类映射

如何使用 Fluent 设置 NHibernate.Burrow?

如何在 Fluent NHibernate ClassMap 类中指定表名?

Fluent nHibernate - 如何在联结表上映射非键列?

如何在Fluent NHibernate中映射受保护的集合?

Fluent NHibernate:如何将整个类映射为只读?