link entity framework 中实体列表的外键列表的最佳方法

Best way to link a list of foreign keys to a list of entities in entity framework

在我的应用程序中,附件是在创建主要实体之前添加到数据库中的。附件在用户填写表格时上传。附件的 ID 返回给浏览器客户端。然后,在创建实体时,将发送以下形式(C# 表示)的 json 对象:

public class EntityModel {
   // some properties
   //...
   ICollection<int> AttachementIds { get;set; }
}

现在我想以类似 Entity Framework 的高效方式保存这些 ID。理想情况下会有这样的 Entity Framework 功能。

public class Entity {
    public ICollection<Attachement> Attachements;
    public ICollection<int> AttachementsIds;
}

我要做的地方:

Entity entity = Mapper.Map<Entity>(entityModel);
dbContext.Entities.Add(entity);
dbContext.SaveChanges();

然后可以这样查询:

List<Attachement> attachements = dbContext.Entities.Find(1).Attachements.ToList();

如何有效地做类似的事情,如果可能的话,将附件保存在数据库中?

谢谢

是的,因为您有 FK,所以无需获取。假设您的 Attachement 有一个 Id 属性,请不要将 int ID 的集合添加到实体模型 (Entity)。现在你可以这样保存(还有其他方法):

var entity = Mapper.Map<Entity>(entityModel);  //parent properties
foreach (var id in  AttachementsIds)
{
    entity.Attachements.Add(new Attachement { Id = id });
}
dbContext.Entities.Add(entity);
dbContext.SaveChanges();

需要调整您的查询,因为 Find() 不会返回 children(或使用 ToList):

var attachement = dbContext.Entities
                           .Include(e => e.Attachements)
                           .First(e => e.Id == 1);

或者如果你想要一个列表:

var attachements = dbContext.Entities
                            .Include(e => e.Attachements)
                            .ToList();