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

本文关键字:实体 保存 其他 信息 图像 何实现 实现 一个 | 更新日期: 2023-09-27 18:11:18

我有这样的东西:

    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和…,并进入一个实体(表),如下所示:

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

但是什么是最好的方法来引用每条记录的图像表的父

枚举类型作为图像实体的属性是一个好的解决方案吗?

Enum BelongTo 
{
ProductTable,
GalleryTabl,
PersonTable,
}
public Images { 
   BelongTo belong {get;set;}
   int size {set; get;}
   string FileName {set; get;}
}

与enum我不能有导航属性之间的父和子什么是方便的解决方案,并注意DDD

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

如果我没理解错的话,我会说你(至少)有两个选择

  • TPH energy
  • 一个图片表+多个链接表

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类和manymany关系

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

对我来说,这似乎是处理一个图像绑定到几个person和几个product的最干净的场景…