如何在nhibernate中映射接口
本文关键字:映射 接口 nhibernate | 更新日期: 2023-09-27 18:00:39
我有接口IArticle
,所有文章都应该实现它。ArticleBase
abtract类定义了每个文章的公共属性,ArticleA
、ArticleB
进一步定义了这些文章的特定属性。这种情况在这里有更多的描述。
为了实现每个图像都可以有任何类型的文章的情况,并且由于每个文章都实现了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.cs
和IArticle
的ArticleBase
,但我将无法访问可在DI
中使用的IArticle
。
所以问题是:使用代码映射来映射nhibernate中的接口,哪种方法是最好的?
因为ArticleBase
实现了IArticle
,并且所有的*Article
都继承自ArticleBase
,所以在将ArticleBase
映射为基类的依赖注入方面应该不会有任何问题:
public class ArticleBaseMap : ClassMapping<ArticleBase>
{
public ArticleBaseMap()
{
Property(x => x.Category, m =>
{
m.NotNullable(true);
});
// ...
}
}