2014-04-26 51 views
3

我想開發一些基本的web應用程序。我將只發布兩個實體Article和Image的問題。實體 - >接口關係,如何映射

一篇文章有​​很多圖片,一篇或多篇圖片只屬於一篇文章。 每篇文章都實現了接口IArticle和抽象類ArticleBase。 ArticleBase僅爲每篇文章定義了通用屬性,但子文章可以具有除ArticleBase中定義的屬性之外的更多屬性。

所以我有(IArticleArticleBaseArticleComputerArticleCar

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;} 
} 

所以我的問題是:我應該如何映射圖像對象,因爲我不想每一篇文章,其獨立實現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); 
      }); 
     } 
    } 

回答

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; } 
} 

與地圖:(我通常使用功能NHibernate所以道歉,如果這是不正確的語法)

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