EntityFramework.Utilities插入具有实体引用的所有记录

时间:2014-08-09 21:09:21

标签: c# entity-framework

我正在使用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获取记录?谢谢

1 个答案:

答案 0 :(得分:2)

我刚遇到这个问题。对不起,我早些时候没有看到它。

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

对于第二个问题,您必须了解EFUtilities非常有效并且#34; sqlish&#34;。我的意思是,如果您的实体将外键作为proprty(就像sql表那样),它确实最有效。然后你会做

item.BatchTransferId = batch.Id;

我希望我早些时候见过它,但希望它可能会对你或其他人有所帮助。为了引起我的注意,我最好在Github页面上发布SO问题的链接作为问题。