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();
在我的应用程序中,附件是在创建主要实体之前添加到数据库中的。附件在用户填写表格时上传。附件的 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();