在我的应用程序中,在创建主实体之前,会将附件添加到数据库中。当用户填写表单时上传附件。附件的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();
如果可能的话,如何有效地做类似的事情,将附件保留在数据库中?
由于
答案 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();