gpt4 book ai didi

c# - Entity Framework MappingException : The type 'XXX has been mapped more than once

转载 作者:IT王子 更新时间:2023-10-29 04:19:19 26 4
gpt4 key购买 nike

我在 Web 应用程序中使用 Entity Framework 。 ObjectContext是根据请求创建的(使用HttpContext),特此代码:

string ocKey = "ocm_" + HttpContext.Current.GetHashCode().ToString();
if (!HttpContext.Current.Items.Contains(ocKey))
{
HttpContext.Current.Items.Add(ocKey, new ElevationEntityModel(EFConnectionString));
}
_eem = HttpContext.Current.Items[ocKey] as ElevationEntityModel;

不是每次,但有时我有这个异常(exception):

System.Data.MappingException was unhandled by user code Message=The type 'XXX' has been mapped more than once. Source=System.Data.Entity

我非常困惑,我不知道是什么导致了这个问题。

谁能帮帮我?

最佳答案

看起来像是同步问题。一个简单的解决方案是拥有一个共享锁对象(在您的类中):

private static object _lock = new object();

然后你的代码变成:

string ocKey = "ocm_" + HttpContext.Current.GetHashCode().ToString(); 

lock (_lock) {
if (!HttpContext.Current.Items.Contains(ocKey))
{
HttpContext.Current.Items.Add(ocKey, new ElevationEntityModel(EFConnectionString));
}
_eem = HttpContext.Current.Items[ocKey] as ElevationEntityModel;

}

锁 block 基本上意味着一旦一个线程进入“锁” block ,在第一个线程完成之前,其他线程不能访问该 block 。这将停止“包含”方法和“添加”方法之间的争用。

注意:如果应用程序中的其他任何地方正在访问 HttpContext.Current 中的 Items 集合,您也需要在那里进行同步。明智的做法是创建自定义集合,将其添加到 Items 集合,并同步对此的访问。

关于c# - Entity Framework MappingException : The type 'XXX has been mapped more than once,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3061313/

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