C# 实体框架核心不添加记录

C# 实体框架核心不添加记录,c#,entity-framework-core,C#,Entity Framework Core,我正在尝试添加一组具有实体框架核心的记录。由于某些原因,我无法将记录实际保存到数据库中 下面是正在运行的代码。没有抛出异常 using (var context = new UserEntity.UsersContext()) { foreach(var u in users) { var tempUser = await context.User.FirstOrDefaultAsync(x => x.Username == u.Username);

我正在尝试添加一组具有实体框架核心的记录。由于某些原因,我无法将记录实际保存到数据库中

下面是正在运行的代码。没有抛出异常

using (var context = new UserEntity.UsersContext())
{
    foreach(var u in users)
    {
        var tempUser = await context.User.FirstOrDefaultAsync(x => x.Username == u.Username);

        if (tempUser == null)
        {
            context.Add(u);
        }

        await context.SaveChangesAsync();
    }                
}
当我观察调试器时,程序在到达
FirstOrDefaultAsync
调用时停止运行。如果我删除它,程序将正常运行,但是
savechangesync
仍然不会实际将记录插入数据库

有人能提供建议吗?谢谢

编辑1:

await DataWork(smallList);
编辑2分辨率!:

这完全是我的错,因为我过虑了这是一个控制台应用,因为它将被使用一次,再也看不到了。控制台应用程序上的主方法不能是真正异步的

我的解决方案如下:

MyAsyncMethod().Wait();

就这样。在这之后它就开始工作了。感谢大家花时间来帮助我,这将我推向了正确的方向

您目前正在混合使用异步和非异步调用。目前,Add方法应该是AddAsync

如果需要异步操作,则代码应为:

using (var context = new UserEntity.UsersContext())
        {
            foreach(var u in users)
            {
                var tempUser = await context.User.FirstOrDefaultAsync(x => x.Username == u.Username);
                if (tempUser == null)
                {
                    await context.AddAsync(u);
                }

                await context.SaveChangesAsync();
            }                
        }

您当前正在混合使用async和非async调用。目前,Add方法应该是AddAsync

如果需要异步操作,则代码应为:

using (var context = new UserEntity.UsersContext())
        {
            foreach(var u in users)
            {
                var tempUser = await context.User.FirstOrDefaultAsync(x => x.Username == u.Username);
                if (tempUser == null)
                {
                    await context.AddAsync(u);
                }

                await context.SaveChangesAsync();
            }                
        }


您如何调用存在此代码的方法?听起来像是异步死锁。@DavidG刚刚更新了question@Marie这是另一个地方正在拼凑的一组数据。我正在检查以确保我不会在数据库中输入重复记录,只是为了简化一些事情。您可能可以执行调用,而不是FirstOrDefault+null checkUse try catch for undrestand problem.SaveChangesSync最好不在foreach循环中。您如何调用存在此代码的方法?听起来像是异步死锁。@DavidG刚刚更新了question@Marie这是另一个地方正在拼凑的一组数据。我正在检查,以确保我没有在数据库中输入重复记录,只是为了简化一些事情。您可能可以执行一个调用,而不是FirstOrDefault+null checkUse try catch for undrestand problem.SaveChangesSync最好不在foreach循环中。我尝试过使用addasync,但是我得到了与上面相同的结果,这段代码在一个方法上,这个方法也是异步的吗?像异步任务AddUsers()一样?如果您只失败了一个wait或async,那么插入将失败,因此您应该检查您的所有进程,看看是否缺少一个调用方法也是异步的好的,我实际上认为这是因为我在控制台应用程序中这样做。。我想你的回答已经把我推向了正确的方向。是的,如果你直接调用它是程序的主要部分,你可以尝试用
Task.Run(async()=>Wait DataWork(smallList);)。Wait()
来保持异步行为:)我尝试过使用addasync,但是我得到了与上面相同的结果,这段代码在一个方法上,这个方法也是异步的吗?像异步任务AddUsers()一样?如果您只失败了一个wait或async,那么插入将失败,因此您应该检查您的所有进程,看看是否缺少一个调用方法也是异步的好的,我实际上认为这是因为我在控制台应用程序中这样做。。我想你的回答已经把我推向了正确的方向。是的,如果你直接调用它是程序的主要部分,你可以尝试用
Task.Run(async()=>Wait DataWork(smallList);)将它包装在一个任务中。Wait()
保持异步行为:)