我正在尝试开发一些基本的网络应用。我将只用两个实体Article和Image发布问题。
一篇文章有很多图像,一个或多个图像只属于一篇文章。 每篇文章都实现了接口IArticle和抽象类ArticleBase。 ArticleBase仅定义每篇文章的公共属性,但子文章除了ArticleBase中定义的属性外,还可以具有更多属性。
所以我有(IArticle
,ArticleBase
,ArticleComputer
,ArticleCar
)
public abstract class ArticleBase : Entity, IArticle
{
...
public string Name { get; set; }
public DateTime Created { get; set; }
}
public class ArticleComputer : ArticleBase
{
public virtual IList<Image> Images {get; set;}
public virtual OSTypeEnum OS {get; set;}
...
}
public class ArticleCar : ArticleBase
{
public IList<Image> Images {get;set;}
public virtual EngineTypeEnum EngineType {get; set;}
...
}
public class Image : Entity<Guid>
{
public virtual IArticle Article {get; set;}
}
所以我的问题是:我应该如何映射Image对象,因为我不想映射每个独立实现IArticle的文章?
public class ImageMap : ClassMapping<Image>{
public ImageMap() {
Id(x => x.Id, m => m.Generator(Generators.Identity));
ManyToOne(x => x.Article, m =>
{
m.NotNullable(true);
});
}
}
答案 0 :(得分:2)
为什么不创建一个临时抽象类
public abstract class ImageArticle : ArticleBase
{
public virtual IList<Image> Images { get; protected set; }
}
所以ComputerArticle : ImageArticle
等等Image
变为:
public class Image : Entity<Guid>
{
public virtual ImageArticle Article { get; set; }
}
并映射:(我通常使用Fluent NHibernate,如果这是不正确的语法,请道歉)
public class ImageArticleMapping : SubclassMapping<ImageArticle>
{
public ImageArticleMapping()
{
this.Bag(x => x.Images)
}
}