Давайте начнем с самого начала.
Что такое самообследуемые объекты?
Само отслеживающиеся объекты - это сущности, которые могут выполнять отслеживание изменений дажекогда он не подключен к ObjectContext
.Они полезны в тех случаях, когда вы должны изменить сущность, но не можете подключить ее к ObjectContext
.
Так когда же я действительно захочу?
Главным образом, когда у вас должны быть распределенные объекты.Например, один вариант использования - это когда вы создаете веб-сервис, который общается с клиентом Silverlight.Тем не менее, другие инструменты, такие как RIA Services, могут подойти лучше.Другой возможный вариант использования - для длительной задачи.Поскольку ObjectContext предназначен для использования в качестве единицы работы и, как правило, не должен быть долгоживущим, здесь может иметь смысл наличие отключенной сущности.
Имеют ли они какой-либо смысл для MVC?
Не совсем, нет.
Давайте посмотрим на это немного глубже и рассмотрим, что происходит, когда вы обновляете сущность в MVC.Общий процесс выглядит следующим образом:
- Браузер выдает запрос GET для страницы обновления.
- Приложение MVC извлекает объект и использует его для создания страницы HTML обновления.Страница подается в браузер, и большинство объектов C #, включая вашу сущность, удаляются.На этом этапе вы можете перезапустить веб-сервер, и браузер никогда не узнает разницу.
- Браузер выдает запрос POST для обновления сущности.
- Каркас MVC использует данные вPOST для материализации экземпляра модели редактирования, который передается действию обновления.Может случиться, что это тот же тип, что и у сущности, но это новый экземпляр.
- Приложение MVC может обновить сущность и передать эти изменения обратно в базу данных.
Теперь вы можете заставить самосопровождающие сущности работать, включив полное состояние STE в HTML-форму и отправив его обратно в приложение MVC вместе со скалярными значениями сущности.Тогда Самопроверкаемый субъект может, по крайней мере, работать.
Но что это даст вам?Браузер явно не может иметь дело с вашей сущностью как объектом C #.Таким образом, он не может вносить какие-либо изменения в сущность, которую стоит отслеживать, в терминах, понятных самопровозглашенной сущности.