В моей ViewModel У меня есть подобный код:Entity Framework - «Отношения между этими двумя объектами не может быть определена» ошибка, но я думаю, что я использую тот же контекст
public class OrderViewModel
{
private UserOrder order;
private DeliveryCentre deliveryCentre;
// This is my EF Container
private CatalogueContainer catalogue = new CatalogueContainer();
// do some stuff...
public void Save()
{
if (order == null)
{
order = catalogue.UserOrders.CreateObject();
}
// do some other stuff...
if ((deliveryCentre == null)
|| (deliveryCentre.Id != deliveryCentreId))
{
deliveryCentre = catalogue.DeliveryCentres.First(centre => centre.Id == deliveryCentreId);
//Causes a context error, not sure why...
order.DeliveryCentre= deliveryCentre;
}
catalogue.SaveChanges();
}
Итак, когда поставка центр новый, и порядок новый, меня поражает старое «Связь между двумя объектами не может быть определена, потому что они привязаны к различным объектам ObjectContext», что кажется мне пустяком несправедливо - я просто не могу понять что мне нужно сделать, чтобы сделать их более похожими на один и тот же контекст объекта. Я предполагаю, что это связано с некоторым фундаментальным непониманием поведения Entity Framework.
Ну, порядок создается из контекста в начале метода, запрос доставки из него берется из нескольких строк позже. Правильно ли я понимаю, что контекст не является тем, что можно безопасно поддерживать на протяжении всего жизненного цикла объекта? Можете ли вы предложить какие-либо хорошие ресурсы о том, что скрытые характеристики, вызывающие эту проблему, и как безопасно использовать контекст? – glenatron
@glenatron: 'ObjectContext' реализует' IDisposable', потому что есть неуправляемый ресурс (соединение Db), которое должно быть удалено. Если у вас есть объект, прикрепленный к двум различным контекстам, которые не расположены, вы получаете имеющуюся у вас ошибку. Я не вижу, что эта проблема может возникнуть в вашем коде, но есть «... do stuff ...» заполнители, и я не знаю весь контекст вашего кода. Вы проверяли мое предложение, если оно решает проблему? – Slauma
«... do stuff ...» просто в основном проверяет и присваивает свойства заказа - я не мог видеть ничего особенного, но когда я прокомментирую это, ошибка прекращается, что заставляет меня задаться вопросом, есть ли у меня другое отношение, которое я назначаю, может использовать устаревший objectcontext для чего-то, и возникшее здесь сообщение просто немного вводит в заблуждение. – glenatron