实体 – >界面关系,如何映射

我正在尝试开发一些基本的网络应用程序。 我将仅用两个实体Article和Image发布问题。

一篇文章有​​很多图像,一个或多个图像只属于一篇文章。 每篇文章都实现了接口IArticle和抽象类ArticleBase。 ArticleBase仅定义每篇文章的公共属性,但子文章除了ArticleBase中定义的属性外,可以具有更多属性。

所以我有( IArticleArticleBaseIArticleArticleBase

 public abstract class ArticleBase : Entity, IArticle { ... public string Name { get; set; } public DateTime Created { get; set; } } public class ArticleComputer : ArticleBase { public virtual IList Images {get; set;} public virtual OSTypeEnum OS {get; set;} ... } public class ArticleCar : ArticleBase { public IList Images {get;set;} public virtual EngineTypeEnum EngineType {get; set;} ... } public class Image : Entity { public virtual IArticle Article {get; set;} } 

所以我的问题是:我应该如何映射Image对象,因为我不想映射每个独立实现IArticle的文章?

 public class ImageMap : ClassMapping{ public ImageMap() { Id(x => x.Id, m => m.Generator(Generators.Identity)); ManyToOne(x => x.Article, m => { m.NotNullable(true); }); } } 

为什么不创建一个临时抽象类

 public abstract class ImageArticle : ArticleBase { public virtual IList Images { get; protected set; } } 

所以ComputerArticle : ImageArticle等和Image变成:

 public class Image : Entity { public virtual ImageArticle Article { get; set; } } 

并映射:(我通常使用Fluent NHibernate,如果这是不正确的语法,请道歉)

 public class ImageArticleMapping : SubclassMapping { public ImageArticleMapping() { this.Bag(x => x.Images) } }