gpt4 book ai didi

c# - EntityFramework.Utilities 插入所有带有实体引用的记录

转载 作者:太空宇宙 更新时间:2023-11-03 10:41:24 26 4
gpt4 key购买 nike

我正在使用 EntityFramework.Utilities 在我的 MVC 项目中插入记录。

这是关于 EntityFramework.Utilities 的网站:

https://github.com/MikaelEliasson/EntityFramework.Utilities

我用的方法是

EFBatchOperation.For(context, context.entityName).InsertAll(listItem);

它可以工作并且速度很快,但是它不允许我在列表项中有一个实体引用,它抛出一个 SQLexception 说“用户登录失败,这个 session 已经分配了一个跟踪 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 获取记录?谢谢

最佳答案

我刚遇到这个问题。很抱歉我没有早点看到它。

第一个错误在最近的更新中得到解决。除非您使用 Windows 身份验证或在连接字符串中指定 EF 应保留登录信息,否则旧版本无法使用。但正如我所说,如果您使用较新的版本,这个问题就会得到解决。

对于第二个问题,您必须了解 EFUtilities 的工作方式非常“sqlish”。我的意思是,如果您的实体将外键作为属性(就像 sql 表那样),那么它真的最有效。那你会做

item.BatchTransferId = batch.Id;

我希望我早点看到它,但希望它能对你或将来的其他人有所帮助。为了引起我的注意,我最好将指向 SO 问题的链接作为 Github 页面上的问题发布。

关于c# - EntityFramework.Utilities 插入所有带有实体引用的记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25223084/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com