- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
从物化“System.Guid”类型到“System.Int32”类型的指定转换无效。
我们有几个 WCF 服务,它们具有 Multiple 并发模式和 Single 的 InstanceContextMode
。我们的架构专注于使用基于构造函数的依赖注入(inject)的松散耦合模型。这又是使用 Unity 2.0 实现的(每个服务的 web.config 都在统一容器部分中定义的接口(interface)和类型之间进行映射)。我们的依赖项之一是使用 Entity Framework 4 与 MSSql Server 通信的 DAL 程序集(数据访问层)。与数据库对话的类也包含在统一映射中。
当我们运行集成测试时,一切都很好。但是,当我们转到性能环境以运行负载测试(2、3、4 个并发用户)时,我们开始看到以下错误:
System.InvalidOperationException:“Session”上的“auth_token”属性无法设置为“Int32”值。您必须将此属性设置为“Guid”类型的非空值。
使用以下堆栈:
at System.Data.Common.Internal.Materialization.Shaper.ErrorHandlingValueReader`1.GetValue(DbDataReader reader, Int32 ordinal)
at System.Data.Common.Internal.Materialization.Shaper.GetPropertyValueWithErrorHandling[TProperty](Int32 ordinal, String propertyName, String typeName)
at lambda_method(Closure , Shaper )
at System.Data.Common.Internal.Materialization.Shaper.HandleEntityAppendOnly[TEntity](Func`2 constructEntityDelegate, EntityKey entityKey, EntitySet entitySet)
at lambda_method(Closure , Shaper )
at System.Data.Common.Internal.Materialization.Coordinator`1.ReadNextElement(Shaper shaper)
at System.Data.Common.Internal.Materialization.Shaper`1.SimpleEnumerator.MoveNext()
at System.Linq.Enumerable.First[TSource](IEnumerable`1 source)
at System.Linq.Queryable.First[TSource](IQueryable`1 source)
at MISoa.DataAccessLayer.Authentication.AuthenticationDB.RetrieveSession(Guid authToken)
at MISoa.DataAccessLayer.Authentication.AuthenticationAccess.RetrieveSession(String sessionToken)
这是罪魁祸首的方法:
public Session RetrieveSession(Guid authToken)
{
CheckDBContext();
var sessions = (from r in _dbContext.Sessions
where r.auth_token == authToken
select r);
return sessions.Count() > 0 ? sessions.First() : null;
}
CheckDBContext
方法只是检查数据库上下文是否为空,如果是,则抛出自定义异常。
emdx Session 实体对象具有以下公共(public)属性:
Guid auth_token
DateTime time_stamp
String user_id
String app_id
所以,看起来有时上面的 linq 从数据库返回一些其他对象,其中第一列是 int
而不是 guid
?如果是这样 - 为什么?我有多个线程覆盖彼此的数据库上下文的问题吗?顺便说一句——我们将实例化数据库上下文的代码抽象为一个单独的类 (BaseDB),该类也由 unity 处理。所以,因为该服务是单例的,所以我为每个人准备了一个 BaseDB 实例,对吗?这是这里的问题吗?
哦,还有一件事。我们被告知我们将拥有 MSSql 2005,因此在 edmx 文件中我们拥有 ProviderManifestToken="2005"
。但是我刚刚检查了一下,我们的性能数据库所在的服务器是 2008 版本。这是一个问题吗?
感谢您的帮助。
最佳答案
Do I have a problem with multiple threads overriding each other's db context?
是的。看这里:http://msdn.microsoft.com/en-us/library/system.data.objects.objectcontext.aspx
引用上面链接中黄色大框:
The
ObjectContext
class is not thread safe. The integrity of data objects in anObjectContext
cannot be ensured in multithreaded scenarios.
您可能需要考虑将 [ThreadStaticAttribute]
放在您的 _dbContext
字段上。
关于c# - 从具体化 'System.Guid' 类型到 'System.Int32' 类型的指定转换无效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10542055/
可能很明显,但给出这段代码(来自 http://clojure.github.com/clojure/clojure.core-api.html#clojure.core/reify ): (defn
我有一个空页面,我在其中动态添加元素,我正在尝试使用 Materialize,但我遇到了图形问题... 我已按照“http://materializecss.com/”上的不同教程使用正确的方法添加元
我正在尝试定义关系 callto_status(Goal, Status)总是成功,根据调用Goal的结果统一Status (换句话说,我想实现 call_with_inference_limit/3
我在为我的网站设置包含自动完成 (https://materializecss.com/navbar.html) 的物化搜索栏 (https://materializecss.com/autocomp
我有一个即将到来的逻辑考试,并且一直在学习我类(class)中的一些过去的论文。我遇到了一个关于物化的问题,并将其发布在下面; 用具体化来表示变量 B 的性质 取值为 1 或 8。 在阅读了一些资源并
我有一个 Laravel 项目,其中一个页面有 5 个模态(MaterializeCSS),每个模态都有一个表单。当我提交表单并遇到任何验证错误时,模式必须重新打开。 我可以通过运行以下代码来实现这一
我是一名优秀的程序员,十分优秀!