Платформа объекта MappingException: тип 'XXX был отображен несколько раз

Я понял это. Вместо того, чтобы добавлять их к тегу ресурса, я определил его в разделе Фазы сборки-> Копировать файлы . Ключ должен установить опцию Destination на Wrapper , которая указывает, что файлы / папки будут скопированы на уровень папки myApp.app.

26
задан Pero P. 9 October 2012 в 16:51
поделиться

2 ответа

Это похоже на проблему синхронизации. Простое решение будет иметь общий объект блокировки (в вашем классе):

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; 

}

Блок блокировки в основном означает, что как только поток входит блок "блокировка", другие потоки не могут получить доступ к этому блоку, пока не завершится первый поток. Это остановит конфликт между методом «Contains» и методом «Add».

Примечание: Если где-либо еще в вашем приложении есть доступ к коллекции Items в HttpContext.Current, вам также необходимо выполнить синхронизацию. Целесообразно создать собственную коллекцию, добавить ее в коллекцию Items и синхронизировать доступ к ней.

19
ответ дан Carl Heinrich Hancke 28 November 2019 в 07:52
поделиться

Это вызвано тем, что у вас происходит многопоточность и вы обращаетесь к одному и тому же ObjectContext без предварительной синхронизации потоков ...

10
ответ дан Calanus 28 November 2019 в 07:52
поделиться
Другие вопросы по тегам:

Похожие вопросы: