ADO.net ссылка загрузки в собственности - PullRequest
1 голос
/ 14 августа 2010

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

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)); }
    }

Сам список создается в форме вида:

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

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

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

Проблема

Когда я создаю новый объект, все идет хорошо таким образом.Прежде чем дать новый объект моей FormViewModel, я создаю объект, новый (пустой) адресный объект и новый (пустой) объект Country.Это я перехожу к представлению в 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)); }
    }

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

this.addressReference.Load() 

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

Вопрос

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


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

1 Ответ

0 голосов
/ 14 августа 2010
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));
        }
    }

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

...