Видеть, как у вас есть свойство OracleConnection в классе модели представления - это просто кажется неправильным. Предполагая, что вы создали класс DocumentViewModel, я настоятельно рекомендую вам заполнить его в контроллере и исключить из него OracleCOnnection. Вместо того, чтобы наследовать от Document, вы можете использовать AutoMapper для сопоставления. Это включает в себя 2 простых шага:
Вы делаете это один раз за запуск приложения:
AutoMapper.Mapper.CreateMap<Document, DocumentViewModel>();
А затем используйте его в контроллере:
var viewModel = AutoMapper.Mapper.Map<Document, DocumentViewModel>(documentInstance);
Это создаст экземпляр DocumentViewModel и отобразит как можно больше свойств. Делая это, вы избавляетесь от необходимости наследовать от вашего класса Document.
Что касается структуры вашей модели представления. Вместо того, чтобы иметь метод typeStr, имейте свойство TypeStr, которое устанавливается после автоматического сопоставления в действии контроллера. То же самое относится и к вашему методу typeStr.
Вся идея моделей представлений состоит в том, чтобы предоставить пользовательскому интерфейсу тупое максимально возможное представление данных для визуализации. Так что в идеале не нужно вызывать методы и загружать ленивый (должен быть предварительно загружен).
Вы также можете использовать AutoMapper, чтобы отобразить вашу опубликованную модель представления обратно в экземпляр Document в методе post, например так:
Добавить обратное отображение к запуску приложения:
AutoMapper.Mapper.CreateMap<DocumentViewModel, Document>();
А в контроллере:
[HttpPost]
public ActionResult Edit(DocumentViewModel viewModel)
{
var document = AutoMapper.Mapper.Map<DocumentViewModel, Document>(viewModel);
}
Надеюсь, это поможет.
РЕДАКТИРОВАТЬ: Чтобы ответить на ваш вопрос. Вы бы вызвали manualSetLocationStr () для экземпляра Document перед автоматическим сопоставлением для просмотра модели.