我正在使用EntityFramework.Utilities在我的MVC项目中插入记录。
以下是有关EntityFramework.Utilities的网站:
https://github.com/MikaelEliasson/EntityFramework.Utilities
我使用的方法是
EFBatchOperation.For(context, context.entityName).InsertAll(listItem);
它有效并且速度很快,但是它不允许我在listItem中有一个实体引用,它抛出一个SQLexception表示" Login for dailed for user,此会话已被分配跟踪ID xxxx-xxxx。当我使用相同的上下文查找BatchTransfer并使用EFBatchOperation插入记录时,就会发生这种情况。
这是我的代码:
try
{
//create the context
ParkingLotContext context = new ParkingLotContext().Sql();
BatchTransfer batch = context.BatchTransfers.Where(w => w.Id == pBatch.Id).FirstOrDefault();
List<UnParsedRecord> unParsedList = new List<UnParsedRecord>();
foreach (var item in CsvFile.Read<UnParsedRecord>(pUploadPath))
{
item.Id = Guid.NewGuid();
item.BatchTransfer = batch;
item.ParseState = "UnParsed";
unParsedList.Add(item);
}
EFBatchOperation.For(context, context.UnParsedRecords).InsertAll(unParsedList); //this line throws exception because i'm using the same context
}
catch (Exception ex)
{
TempData["Message"] = string.Concat("Unable to add batch transfer record into database. ", ex.Message);
return false;
}
之后,我尝试为insertAll方法创建一个新的上下文:
try
{
ParkingLotContext context = new ParkingLotContext().Sql();
EFBatchOperation.For(context, context.UnParsedRecords).InsertAll(unParsedList);
}
catch (Exception ex)
这一次它没有给我错误但是batchTransfer外键(Guid)没有设置(它显示全部为0)
我如何解决这个问题,或者有没有办法通过使用EntityFramework.Utilities获取记录?谢谢
答案 0 :(得分:2)
我刚遇到这个问题。对不起,我早些时候没有看到它。
第一个错误在最近的更新中得到解决。除非您使用Windows身份验证或在连接字符串中指定EF应保留登录信息,否则旧版本无法使用。但正如我所说,如果你使用更新的版本,那就解决了。
对于第二个问题,您必须了解EFUtilities非常有效并且#34; sqlish&#34;。我的意思是,如果您的实体将外键作为proprty(就像sql表那样),它确实最有效。然后你会做
item.BatchTransferId = batch.Id;
我希望我早些时候见过它,但希望它可能会对你或其他人有所帮助。为了引起我的注意,我最好在Github页面上发布SO问题的链接作为问题。