我正在导入一个巨大的文件,这使我创建了许多模块与他们的产品在1对N的关系.
然而,可能存在错误(异常),并且这些异常与产品之间存在N对N的关系:
public class Module
{
public int Id { get; set; }
public ICollection<Product> Products { get; set; } = new List<Product>();
}
public class Product
{
public int Id { get; set; }
public int ModuleId { get; set; }
public Module? Module { get; set; }
public ICollection<Anomalie> Anomalies { get; set; } = new List<Anomalie>();
}
public class Anomalie
{
public int Id { get; set; }
public ICollection<Product> Products { get; set; } = new List<Product>();
}
重要的是要注意,数据库中已经存在异常,我不会创建新的异常,只将它们链接到产品.
下面我有一个通用的AddBulkAsync
方法,我在其中发送我的实体以插入它:
public virtual async Task<IList<T>> AddBulkAsync(ICollection<T> entities)
{
try
{
await _dbContext.Set<T>().AddRangeAsync(entities);
await _dbContext.SaveChangesAsync();
_logger.LogInformation($"Entité ajoutée avec succès - {typeof(T).Name}");
return entities.ToList();
}
catch (Exception ex)
{
_logger.LogError($"Impossible d'ajouter l'entité {typeof(T).Name} : {ex.Message}");
}
return new List<T>();
}
简而言之,假设我只插入了一个实体的列表:
var modulesToInsert = new List<Module>() {
new Module() {
Products = new List<Product>() {
new Product() { ... },
new Product() { ... },
new Product() { ... },
}
}
};
await AddBulkAsync(moduleToInsert); // This works
// ----------------------------------------------------------
var anomalie1 = await GetAnomalieWithIdAsync(1); //get from db
var anomalie2 = await GetAnomalieWithIdAsync(2); //get from db
var modulesToInsert2 = new List<Module>() {
new Module() {
Products = new List<Product>() {
new Product() { Anomalies = new List<Anomalie>() { anomalie1, anomalie2 } },
new Product() { Anomalies = new List<Anomalie>() { anomalie1, anomalie2 } },
}
}
};
await AddBulkAsync(moduleToInsert2); // This doesn't works
这里我得到一个错误,告诉我实体Anomalie
和Id = 1
已经被跟踪.
我试图用Id = 1
创建一个空对象Anomalie
,但我得到了同样的错误.
我还需要继续使用AddRange
,因为我可以插入很多实体,有什么建议吗?