我有一个奇怪的问题,我一直在尝试解决。
bulkinsert在一个数据库中起作用,而不是另一个数据库,即使使用相同的表也是如此。Visual Studio 2017,C#。我使用了反向POCO来构建实体框架文件。
每个DB中的SQL表仅由:
组成CREATE TABLE [dbo].[BulkInsertTest](
[id] [int] NOT NULL,
[name] [varchar](50) NOT NULL,
CONSTRAINT [PK_BulkInsertTest] PRIMARY KEY CLUSTERED
(
[id] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF,
ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
GO
C#代码简单:
using (GISDbContext db = new GISDbContext())
{
List<BulkInsertTest> sqlFormattedRecords = new List<BulkInsertTest>();
for (int i = 20; i < 40; i++)
{
BulkInsertTest record = new BulkInsertTest();
record.Id = i;
record.Name = $"NameIs{i}";
sqlFormattedRecords.Add(record);
}
// Insert the newly loaded records into the table
using (var transactionScope = new TransactionScope())
{
db.BulkInsert(sqlFormattedRecords);
db.SaveChanges();
transactionScope.Complete();
}
}
当我将相同的代码指向一个数据库时,它有效。当我将其指向其他数据库时,它不是。它在bulkinsert函数中的无效指针例外失败:
at EntityFramework.BulkInsert.ProviderFactory.Get(DbContext context)
因此,我尝试重新创建第二个DB的连接字符串。第二组反向poco tt文件实际上是第一个数据库的tt文件的副本,上下文名称更改为gisdbcontext。
您会认为这会起作用。不是。同样的错误。
将代码改回使用第一个反向Poco DBContext仍然有效。
所以不是连接字符串。这不是反向poco .tt文件。这不是数据库或表。但是我不确定问题是什么。
编辑:因此,当前我删除了第二个(无工作的)反向POCO TT文件,并尝试更新第一个文件以查看它将崩溃的位置。一切都起作用,直到我尝试更改dbcontextname。当我这样做时,它破裂了。不管我将其更改为什么,如果它不是我用于工作tt文件的原始上下文名称,它会崩溃。
这对我来说绝对没有意义。
我尝试清洁解决方案(该解决方案中的一个项目)。清洁解决方案后,我尝试清理OBJ/BIN文件夹。没有效果。太疯狂了。
这有点重复。我简化了代码来缩小发生的事情,然后再次发布了它,因为我认为人们不为此而烦恼。
解决方案使DBContext名称与连接字符串名称相同。谢谢Fakhar。