gpt4 book ai didi

c# - 同时调用 ASP.NET 托管的 WCF 服务时出现 Entity Framework 错误

转载 作者:行者123 更新时间:2023-11-30 12:32:04 25 4
gpt4 key购买 nike

我有一个简单的 ASP.NET 托管 WCF 服务,它有几个方法,在使用 Entity Framework 时都具有相同的模式...

public void Operation1(string username)
{
using(MyEFContext context = new MyEFContext())
{
UserInfo info = (from ui in context.UserInfos
where ui.User.Equals(username)
select ui).FirstOrDefault<UserInfo >();

info.LastAccess = DateTime.Now;

// Operation specific code, such as getting information using the EF context

context.SaveChanges();
}
}

这是一个简化版本,以保持示例简单,但即使是这个简单版本也有与我的生产代码集相同的错误。该代码首先使用实体​​框架获取用户信息,更新用户的 LastAccess 字段,然后执行特定于操作的代码。特定于操作的代码只是查询信息。最后它调用 SaveChanges 以便将 LastAccess 保存回数据库。现在这一切都工作得很好,直到我的客户同时进行两个调用。

客户端进行两次调用,每次调用不同的操作,但它们都具有如上所示的相同代码模式。有时两个调用都成功完成。但有时其中一个会产生错误,它可能是以下三个中的任何一个......

System.Data.EntityException: The underlying provider failed on Open. ---> 
System.InvalidOperationException: The connection was not closed. The connection^s current
state is connecting.

System.Data.EntityCommandExecutionException: An error occurred while executing the command
definition. See the inner exception for details. ---> System.InvalidOperationException:
ExecuteReader requires an open and available Connection. The connection^s current state is
closed.

System.InvalidOperationException: Invalid attempt to read when no data is present.

很明显,我对 EF 和 ASP.NET 的理解是有缺陷的,因为我预计这两个操作甚至可以并行工作。我是否需要锁定每个方法以便它们一次只出现一个?当然不是。有什么想法吗?

最佳答案

在这里找到答案 Managing EntityConnection lifetime .事实证明,为我的所有上下文重用相同的 EntityConnection 实例是问题所在。所以现在我每次都创建一个新的。

关于c# - 同时调用 ASP.NET 托管的 WCF 服务时出现 Entity Framework 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12151274/

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