如何在nhibernate中映射接口

本文关键字:映射 接口 nhibernate | 更新日期: 2023-09-27 18:00:39

我有接口IArticle,所有文章都应该实现它。ArticleBase abtract类定义了每个文章的公共属性,ArticleAArticleB进一步定义了这些文章的特定属性。这种情况在这里有更多的描述。

为了实现每个图像都可以有任何类型的文章的情况,并且由于每个文章都实现了IArticle,我决定在image类中使用IArticle类型的数据。

由于我很难弄清楚如何映射这些与接口的关系,我尝试通过代码使用nhibernate映射来映射IArticle,以及所有其他实现IArticle的类使用具有鉴别器值的子类映射来映射

public class ArticleAMap : SubclassMapping<ArticleA>
{
   public ArticleAMap()
   {
      DiscriminatorValue("ArticleA");
      ... mapping other ArticleA specific properties ...
   }
}
public class IArticleMap : ClassMapping<IArticle>
{
   public IArticleMap()
   {
      Property(x => x.Category, m =>
      {
         m.NotNullable(true);
      });
      ....
   }
}

由于我的IArticle无法访问负责创建唯一标识符的Entity类,我无法映射Id。另一方面,我可以使用实现Entity.csIArticleArticleBase,但我将无法访问可在DI中使用的IArticle

所以问题是:使用代码映射来映射nhibernate中的接口,哪种方法是最好的?

如何在nhibernate中映射接口

因为ArticleBase实现了IArticle,并且所有的*Article都继承自ArticleBase,所以在将ArticleBase映射为基类的依赖注入方面应该不会有任何问题:

public class ArticleBaseMap : ClassMapping<ArticleBase>
{
    public ArticleBaseMap()
    {
        Property(x => x.Category, m =>
        {
            m.NotNullable(true);
        });
        // ...
    }
}