将外键列表链接到实体框架中的实体列表的最佳方法

时间:2016-03-31 12:53:43

标签: c# entity-framework ef-code-first

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

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

现在,我希望将这些ID保存在类似于实体框架的高效方式中。理想情况下会有一些像这样的实体框架功能。

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();

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

由于

1 个答案:

答案 0 :(得分:1)

是的,因为你没有需要获取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()不会带回孩子(或使用ToList):

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

或者如果你想要一个清单:

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