Извините, если это глупый вопрос, но я устал сегодня, и Google не помогает. Это должна быть общая проблема, но я ничего не нашел, отвечая на вопрос.Как разрешить нескольким пользователям выполнять обновления Db в Entity Framework в распределенном приложении
Всякий раз, когда я использовал Entity Framework в настольных приложениях clickonce, я немного пострадал, когда «объект объекта не может ссылаться на несколько экземпляров IEntityChangeTracker». Это возникает, когда несколько версий одного и того же объекта базы данных обновляются разными версиями контекста.
В веб-проекте легко обойти эту проблему, отправив все вызовы Db через какой-то одноэлементный шаблон на сервере. Если вы обрабатываете много сообщений об обновлении/вставке Db для службы, вы можете сделать то же самое.
Но что, если у вас есть распределенное приложение (например, WPF через clickonce), в котором потенциально может быть много пользователей, подключающихся к базе данных. У каждого пользователя есть своя установка кода, поэтому, даже если вы отделите бизнес-логику от логики Db, каждый пользователь будет по-прежнему иметь свою собственную копию контекста.
Есть ли какой-либо шаблон или метод, который позволил бы вставлять/обновлять прямо из приложения, избегая проблемы с «множественными контекстами»? Или использовать что-то вроде службы Windows - единственный способ добиться этого?
Это проблема параллелизма? можете ли вы добавить временную метку в своей модели? – Larry
@Larry - это проблема - это предполагаемая система, которая будет иметь довольно большое количество пользователей, некоторые из которых захотят работать с одними и теми же данными одновременно. Поскольку мы все еще находимся на стадии планирования, мы можем рассмотреть возможность добавления временных меток к записям, если это поможет (и я могу видеть, как это возможно). Меня все равно интересовало бы более «техническое» решение, из любопытства. –
, вы все же можете использовать ту же архитектуру, что и веб-приложения. Вместо того, чтобы все ваши клиенты сразу разговаривали с db, у вас может быть средний человек, находящийся между клиентом и слоем db. Этот средний человек может быть веб-сервисом (например). Таким образом, все клиенты будут разговаривать с веб-сервисом, и этот веб-сервис является единственной точкой для подключения базы данных, и ваша проблема решена. – Larry