В настоящее время я занимаюсь разработкой многопользовательской системы управления данными в .NET 4.0.
Мой интерфейс представляет собой приложение WPF, которое получает все данные с сервера SqlExpress.Я использую последнюю версию Entityframework в качестве основного слоя данных для чтения и записи в базу данных.
Программное обеспечение должно обрабатывать следующий сценарий.Каждый интерфейс (приложение WPF) может добавлять и изменять данные в базе данных, которая создается самим клиентом.Клиенту не разрешено изменять / удалять записи от других пользователей, поэтому каждый объект хранит информацию об имени пользователя в основном объекте.
Здесь вы можете увидеть модель данных, которую я использую (EF Code First Approach).

Я использую этот запрос для загрузки всех данных во внешнее приложение:
public static Context GetDataContext()
{
return new Context(Settings.ServerConnection);
}
public Project LoadProject(int id)
{
Remoting.Context = GetDataContext();
Project = Remoting.Context.dbsProjects.Where(p => p.Id == id)
.Include(p => p.Categories.Select(x => x.Templates.Select(y=>y.Properties.Select(xx=>xx.Binding))))
.Include(p => p.Categories.Select(x => x.Templates.Select(y => y.Links)))
.Include(p => p.DataSources).FirstOrDefault();
OnPropertyChanged("Project");
return Project;
}
После этой начальной загрузки все данныеотображается правильно в моем интерфейсе.Пока все хорошо, что это было легко.
Теперь я хочу синхронизировать мой DbContext, который является долгоживущим контекстом, для полного времени выполнения MainWindow.Означает, что когда другой веб-интерфейс вставляет данные обновлений, которые принадлежат ему, я хочу отображать их также во всех других клиентах.
Я нашел решение, как обновить все уже существующие сущности в одном контексте, поэтому я использую этостроки кода:
var refreshableObjects = Remoting.Context.ChangeTracker.Entries().Select(c => c.Entity).ToList();
Remoting.Context.ObjectContext.Refresh(System.Data.Entity.Core.Objects.RefreshMode.StoreWins, refreshableObjects);
Я не уверен, что это правильное решение, но пока оно работает для меня.
Пока я могу обновить все уже загруженные объекты, но японятия не имею, как я могу обнаружить объекты, которые созданы или удалены другим интерфейсом, который работает в то же время.Существует ли какой-либо встроенный механизм для обновления исходного запроса linq, который загружает или удаляет новые объекты в базе данных?
Спасибо за вашу помощь!