如何实现一个为所有其他实体保存图像信息的实体集

时间:2014-07-02 11:51:25

标签: c# .net entity-framework entity domain-driven-design

我有这样的事情:

    public class Product{ 
       [some properties] 
       public ICollection<ProductImage> ProductImages {set;get;}
    }
    public class ProductImages {
         string fileName,
         string size, ... 
         public Product Product{set;get}
    }

public class Poeple{ 
  [some properties] 
  public virtual ICollection<PersonImage> PersonImages {set;get;}
}
public class PersonImages{ 
  string fileName, string size, ... public Person Person{set;get} 
}

...以及其他一个实体,其中有一个表作为孩子作为自己的图像;

我希望从所有ProductImages,PersonImages和...中获取摘要,并获得One Entity(表格),如下所示:

public Images {
int size{set;get;} , 
string FileName{set; get;}, ... othes prop
}

但是,将图像表的每个记录引用到它的父母

的最佳方法是什么

Enum Type作为图像实体的属性是一个很好的解决方案Enum类型,如:

Enum BelongTo 
{
ProductTable,
GalleryTabl,
PersonTable,
}

public Images { 
   BelongTo belong {get;set;}
   int size {set; get;}
   string FileName {set; get;}
}

使用枚举我不能在父级和子级之间拥有导航属性 什么是关注DDD的方便解决方案

1 个答案:

答案 0 :(得分:0)

如果我很清楚我会说你有(至少)2个选择

  • TPH
  • 一张图片表+多张链接表

TPH将导致许多空列。

public class BaseImage { 
   public int size {set; get;}
   public string FileName {set; get;}
}

public class PersonImage : BaseIMage {
   [Required]
   public virtual Person Person {get; set;}
}

public class ProductImage : BaseIMage {
   [Required]
   public virtual Product Product {get; set;}
}

public class GalleryImage : BaseIMage {
   [Required]
   public virtual Gallery Gallery {get; set;}
}

这几乎相当于

public class Image {
   public int size {set; get;}
   public string FileName {set; get;}

   [Optional]
   public virtual Person Person {get; set;}
   [Optional]
   public virtual Product Product {get; set;}
   [Optional]
   public virtual Gallery Gallery {get; set;}
}

===== =====

或者您可以使用一个Image类和ManyToMany关系

public class Image {
   public int size {set; get;}
   public string FileName {set; get;}

   public virtual ICollection<Person> Persons {get; set;}
   public virtual ICollection<Product> Products {get; set;}
   public virtual ICollection<Gallery> Galleries {get; set;}
}

public class Person {
    ....
    public virtual ICollection<Image> Images {get; set;}
}

在我看来,处理一个图像绑定到几个人和几个产品的最干净的场景......