我发现了这个问题:How to get the Schema name of a Table in Entity Framework? 并从那里建造。我的解决方案是首先在链接文章中创建扩展方法,然后将 ObjectContext 扩展方法修改为以下内容:
public static string GetTableAndSchema<T>(this ObjectContext context) where T : class
{
var sql = context.CreateObjectSet<T>.ToTraceString();
var startTrim = sql.LastIndexOf("FROM") + 5;
var initialTrim = sql.SubString(startTrim);
var endTrim = initialTrim.IndexOf("AS");
return sql.Substring(startTrim, endTrim).Replace("[","").Replace("]","");
}
然后,这使我可以将以下内容放入我的 GenericRepository 中:
public GenericRepository<TEntity> : IGenericRepository<TEntity> where TEntity : EntityBaseClass{
//REMOVED IRRELEVANT CODE
private MyContextType _context;
public virtual void AddBulk<IEnumerable<TEntity> toAdd, string connectionString, int batchSize)
{
using (SqlBulkCopy sbc = new SqlBulkCopy(connectionString, SqlBulkCopyOptions.TableLock | SqlBulkCopyOptions.CheckContstraints | SqlBulkCopyOptions.KeepIdentity))
{
sbc.DestinationTableName = _context.GetTableAndSchema<TEntity>();
//DO THE REST OF SQL BULK COPY
}
}
}
这对我来说非常有效,现在允许我为我的上下文中存在的每个实体拥有一个 SQL 批量副本。