Принимая эти проблемы в порядок ...
Во-первых, если вас беспокоит оператор using и репозиторий (я не знаю, является ли он LINQ-to-SQL или LINQ-to-Entities, но это не имеет значения), что бы я порекомендовал вам сделать это реализовать IDisposable на вашем контроллере, а затем сохранить хранилище в поле на модели или в контроллере или где-нибудь, где у вас есть доступ к нему в представлении (если вам это нужно, если модель знает об этом, в то время как модель объект "живой", тогда вам просто нужно сохранить его на всю жизнь контроллера).
Затем, когда запрос завершен, вызывается метод Dispose на вашем контроллере, и вы можете избавиться от хранилища там.
Лично у меня в базовом классе контроллера есть метод, который выглядит следующим образом:
protected T AddDisposable<T>(T disposable) where T : class, IDisposable
{
// Error checking.
if (disposable == null) throw new ArgumentNullException("disposable");
// Add to list
...
}
По сути, он позволяет хранить реализации IDisposable, затем в реализации IDisposable контроллера он выполняет итерацию по списку, избавляясь от всего.
Что касается раскрытия адреса в модели сущностей, лично я не рассматриваю это как проблему кровотечения. Адрес является частью состава контакта (IMO), поэтому было бы неправильно, если бы не имел его там.
Однако я не согласен, если вы этого не хотите, потому что вы хотите сосредоточиться на одном типе на одном контроллере за раз, и т. Д., И т. Д.
Для этого вам нужно создать объекты передачи данных, которые в основном отображаются между типом, который вы предоставляете в модели представления, и вашей моделью сущности.