实体->;接口关系,如何映射

本文关键字:何映射 映射 关系 gt 接口 实体 | 更新日期: 2023-09-27 18:00:10

我正在尝试开发一些基本的web应用程序。我将只发布文章和图片两个实体的问题。

一篇文章有许多图像,一个或多个图像只属于一篇文章。每一篇文章都实现了接口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的文章,我应该如何映射Image对象?

public class ImageMap : ClassMapping<Image>{
   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<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)
    }
}