Я занимаюсь разработкой приложения с использованием WPF / MVVM.У меня есть проект службы данных WCF, который предоставляет операции для извлечения данных из модели данных ADO.NET с использованием структуры сущностей.Затем у меня есть клиент wpf, который связывается со свойствами viewmodel, которые выбираются из службы WCF.Сценарий вовлекает клиентов / офисы.Клиентская сущность имеет свойство навигации типа office, которое реализовано в виде внешнего ключа в базе данных.Проблема в том, что когда моя viewmodel получает список клиентов из службы данных, свойство навигации имеет значение null.Операция службы, однако, получает эту информацию.
Операция службы WCF
[OperationContract]
public IEnumerable<Client> GetClientsByOffice(int officeID)
{
using (var context = new LDC_Entities())
{
var result = context.Clients.Include("Registered_Office")
.Where(c => c.Registered_Office_ID == officeID).ToList();
result.ForEach(c => context.Detach(c));
return result;
}
}
Как видно, свойство office загружается в контекстном запросе.Если в этот момент я установлю точку останова, переменная результата содержит информацию о клиентах, а свойство навигации также будет заполнено, как и ожидалось.
WPF ViewModel
private void RefreshClients()
{
serviceClient.GetClientsByOfficeCompleted += (s, e) =>
{
Clients = e.Result;
foreach (Client c in Clients)
MessageBox.Show(c.Office.City);
};
this.serviceClient.GetClientsByOfficeAsync(CurrentOffice.Office_ID);
}
Если я проверяю свойство Clients после вызова этого метода, свойство навигации теперь пусто, и поэтому вызов окна сообщения, который я ввел, выдает исключение нулевого указателя.Похоже, что, проходя через службу WCF, он отбрасывает свойства навигации клиентских объектов.
Может кто-нибудь объяснить, как можно сохранить эту информацию при выполнении этого вызова?
Большое спасибозаранее, Майк