使用Entity Framework Core共享表

时间:2019-04-09 20:02:31

标签: c# asp.net-core entity-framework-core

我有多个实体,我想共享一个“图像”表。例如,产品可以具有图像列表,类别可以具有图像列表。我想使用枚举“ EntityType”来区分它是什么类型的实体。我下面的解决方案不起作用,因为当我尝试插入带有EntityId的图像时可能会出现外键错误,而EntityId可能存在于Category而不是Product中。这是有道理的,因为下面的解决方案未考虑“ EntityType”。有什么建议可以实现这一目标吗?我知道我可以使用“ ProductId”,“ CategoryId”等代替“ EntityId”,但是我会有很多实体,所以我宁愿不要那样做。

const story = await collection.findOneAndUpdate(
  { "_id" : ObjectID( docId ) },
  { "$pull": { "stories": { "story_id": storyId } }},
  { "new": true }
)

const update = await collection.findOneAndUpdate(
  { "_id" : ObjectID( docId ) },
  { "$set": {
    "stories": story.stories.map((a, i) => { if (parseInt(a.story_id) > parseInt(story_id)) return { story_id: parseInt(a.story_id) + 1 }})
  }}
)

1 个答案:

答案 0 :(得分:0)

您所描述的是多对多关系。为此,您需要一个实体来跟踪所述关系:

public class ProductImage
{
    [ForeignKey(nameof(Product))]
    public int ProductId { get; set; }
    public Product Product { get; set; }

    [ForeignKey(nameof(Image))]
    public int ImageId { get; set; }
    public Image Image { get; set; }
}

在您的Product / Category班上:

public ICollection<ProductImage> ProductImages { get; set; }

然后,进行流畅的配置:

modelBuilder.Entity<ProductImage>().HasOne(p => p.Product).WithMany(p => p.ProductImages);
modelBuilder.Entity<ProductImage>().HasOne(p => p.Image).WithMany();

对类别进行相同操作。