我有一个名为Persistance
的项目,在那里我安装了名为EFCore.BulkExtensions的Nuget包,用于批量插入。
我有另一个名为Application
的项目,它定义了表示DBset
的接口,如下所示:
应用程序项目:
public interface IDatabaseService
{
public DbSet<Employee> Employee {get;set;}
public DbSet<Department> Department {get;set;}
public void Save();
public void Insert<T>(IEnumerable<T> lists);
public int ExecuteSP(string procedureName,params object[] parameters);
}
持久性项目:
using EFCore.BulkExtensions;
public class MyDatabaseContext : DbContext,IDatabaseService
{
private readonly IConfiguration _configuration;
public MyDatabaseContext(IConfiguration configuration)
{
_configuration = configuration;
Database.EnsureCreated();
}
public DbSet<Employee> Employee {get;set;}
public DbSet<Department> Department {get;set;}
public void Save()
{
this.SaveChanges();
}
public void Insert<T>(IEnumerable<T> lists)
{
this.BulkInsert(lists);/error here
}
}
错误:为方法键入参数DbContextBulkExtensions.BulkInsert(DbContext,IList(不能为根据用法推断。
如何修复此问题?
EFCore.BulkExtensions.DbContextBulkExtensions
的源代码可在GitHub上获得。BulkInsert<T>
方法要求实体通过IList<T>
集合]1传入,而不是作为IEnumerable<T>
传入- 此外,它们还将
T
约束为where T : class
,因此也添加了该约束
所以更改这个:
public void Insert<T>( IEnumerable<T> lists )
{
this.BulkInsert(lists);/error here
}
到此:
public void Insert<T>( IList<T> entities )
where T : class
{
this.BulkInsert( entities: entities );
}