2010-08-14 3 views
1

У меня есть следующая проблема. У объекта есть адрес, и этот адрес имеет страну. Для того, чтобы заполнить DropDownList с доступными странами в БД я использую свойство в частичном классе объекта:ADO.net reference loading in Property

public string CountryID { 
     get { return this.Addresses.Countries != null ? this.Addresses.Countries.ID.ToString() : null; } 
     set { this.Addresses.Countries = Repository.Instance.GetCountryByID(Convert.ToInt32(value)); } 
    } 

Сам список формируется в formviewmodel по:

Countries = new SelectList(repository.GetAllCountries(), "ID", "country_name", objectX.CountryID); 

и в посмотреть он используется так:

<%= Html.DropDownList("CountryID", Model.Countries, "--select--")%><%= Html.ValidationMessage("CountryID", "*")%> 

проблема

Когда я создаю новый объект, все идет хорошо. Прежде чем я отправлю новый объект в свой FormViewModel, я создам объект, новый (пустой) адресный объект и новый (пустой) объект Страны. Это я перехожу к представлению в FormViewModel, и я могу создать объект по мере необходимости. Проблема возникает, когда я хочу отредактировать этот объект с той же частичной формой и тем же свойством, CountryID. Он жалуется, что нет никакого адреса, так что я должен добавить

this.AddressReference.Load() 

поэтому свойство становится:

public string CountryID { 
     get { this.AddressesReference.Load(); return this.Addresses.Countries != null ? this.Addresses.Countries.ID.ToString() : null; } 
     set { this.AddressesReference.Load(); this.Addresses.Countries = Repository.Instance.GetCountryByID(Convert.ToInt32(value)); } 
    } 

Но теперь мой Создать метод не делает больше не работать, как в момент создания объекта не пока привязан к контексту объекта (он по-прежнему должен быть сохранен в БД), и

this.addressReference.Load() 

вызывает проблемы.

Вопрос

Есть ли способ, что я могу использовать одну форму (частичный вид), а также одно свойство, используемое выше для создания, а также редактирования объекта?


P.S. Я начинаю не любить ленивую загрузку ADO.net в MVC1, я думаю, это исправлено в MVC2 правильно?

ответ

0
public string CountryID { 
     get { 
      if (this.AddressesReference.EntityKey != null) { 
       this.AddressesReference.Load(); 
      } return this.Addresses.Countries != null ? this.Addresses.Countries.ID.ToString() : null; 
     } 
     set { 
      if (this.AddressesReference.EntityKey != null) { 
       this.AddressesReference.Load(); 
      } this.Addresses.Countries = Repository.Instance.GetCountryByID(Convert.ToInt32(value)); 
     } 
    } 

Кажется, делать то, что я хочу, хотя я считаю, что это вроде некрасиво. Здесь всегда можно найти лучшие варианты:.