我有产品和位置实体可能/可能没有图像集合。 我知道我不能在相应的实体中创建列表,但我也不想在Image实体中为其他两个实体建立关联。
我只想让Image Entity拥有Id和文件路径。
我有办法做到这一点吗?
如果答案是我必须在图像实体中为其他两个创建关联,那么这意味着将来我创建一个可能/可能没有照片的新实体,我必须修改图像实体协会,我不喜欢这个想法。
提前致谢。
答案 0 :(得分:0)
您可以创建两个新表,ProductImages和LocationImages,从您的产品和位置链接到集合,当您插入项目时,插入连接图像和产品的记录。
这样,当您加载产品或位置时,可以通过检查集合来检查是否有任何关联图像。
答案 1 :(得分:0)
听起来你想要一个单向的关系。它是否正确?您想要从产品和位置访问Collection<Image>
,但无法从图像访问产品或位置?
你可以这样做。在EF中,Image类不具有Product或Location的导航属性 - 它只有Id和FilePath。
但是在数据库中,Image表 将 包含ProductId和LocationId的列。这样EF就可以管理外键关系并填充产品和位置上的集合属性。
代码:
modelBuilder.Entity<Product>.HasMany(p => p.Images).WithOptional()
.Map(d => d.MapKey("ProductId"));
modelBuilder.Entity<Location>.HasMany(p => p.Images).WithOptional()
.Map(d => d.MapKey("LocationId"));
在应用程序中管理这些图像时,您只需将图像添加到主体实体(产品和位置)上的Images集合属性,而无需将相关图像的导航属性设置回主体(您不能外键属性不存在)。