【发布时间】:2021-04-28 18:06:00
【问题描述】:
我有下面的方法可以将新记录插入我的数据库
public static async Task SaveDataToEntitySetAsync<TEntity>(DbContext context,List<TEntity> list)
where TEntity : class
{
if(list.Any() == false)
return;
var dbSet = context.Set<TEntity>();
var existingData = await dbSet.Select(x=>x.Id).ToListAsync();
list.RemoveAll(x => existingData.Contains(x.Id));
await dbSet.AddRangeAsync(list);
}
如果我不使用泛型,上面的逻辑就是我想要做的事情
如何将其转换为适用于泛型的语法?此语法在通用上下文中不起作用,因为 .Id 无效
我使用的是 EF Core,因此当向表中添加记录时,EF Core 会自动将记录添加到关联的外键表中
这种方法的问题是我在我的上下文中为每个表调用了这个方法。
假设添加了一位英国客户。这很好,添加了客户,并添加了 Country UK(假设它还没有)
我还有一个我保存到数据库中的所有国家的摘录。显然现在这将打破,因为英国已经被拯救了
因此,我试图从我的国家/地区列表中删除已在数据库中的所有项目
我所有的实体都来自 BaseEntity(这是定义 Id 的地方),但我不知道如何利用这个事实
保罗
【问题讨论】:
标签: c# linq generics linq-to-sql entity-framework-core