2014-02-11 3 views
0

У меня возникла проблема с моими жизненными временами контекста в приложении N-уровня.Управление временем жизни контекста в инфраструктуре Entity

Пример обертке я использую:

Public Class User 
Private _user As DB.User 
Private context As New DB.MyContainer 

Public Sub New(ByVal UserID As Integer) 
     _user = context.Users.FirstOrDefault(Function(x) x.Id = UserID) 
End Sub 

Public Sub Save() 
    context.SaveChanges() 
End Function 

Этот метод вызывает проблемы в моем слое UI. Данные могут обновляться уровнем пользовательского интерфейса, и это все равно будет возвращать «устаревшие» данные, поскольку контекст не был удален. Если в Finalize() установить set.Dispose(), то я не могу получить доступ к каким-либо свойствам класса.

Должен ли я просто звонить .reload() каждый раз, или я должен сократить контекст? Чтобы сократить это, мне не придется отделять объект, а затем привязать его к новому контексту при вызове Save()?

+0

Это Windows Form или ASP.Net? – Win

+0

Asp.net vb ..... –

ответ

1

Пожалуйста, обратитесь к этой статье: http://msdn.microsoft.com/en-us/magazine/ee335715.aspx

Создать новый экземпляр ObjectContext в Использование заявления для каждого метода службы так, чтобы он выбывает до возврата метода. Этот шаг имеет решающее значение для масштабируемости вашего сервиса. Он обеспечивает , что соединения с базой данных не остаются открытыми между вызовами служб и , что временное состояние, используемое конкретной операцией, - это мусор , собранный, когда эта операция завершена. Entity Framework автоматически кэширует метаданные и другую информацию, необходимую ему в домене приложений , и ADO.NET объединяет соединения с базой данных, поэтому каждый раз повторное создание контекста является быстрой операцией.

+0

Проблема, с которой я использовал этот подход, заключалась в том, что когда я вызываю new(), а затем пытаюсь получить доступ к общедоступному свойству класса, объект объекта имеет значение null –

Смежные вопросы