2013-11-08 3 views
0

Я добавил некоторые атрибуты вокруг полей моей модели (сгенерированных EF) (например: [DisplayName («Office Contact»)]) Когда я обновляю свою модель из базы данных, мой класс модели восстанавливается, и я очевидно, я теряю эти атрибуты.Атрибуты модели MVC get overriden

есть обходное решение вокруг этого?

Спасибо.

ВОТ ИМЕННО Я использую на атрибутах EF МОДЕЛЬ:

EF модель: Office.cs мои ViewModel: NewOfficeViewModel.cs

но офис является собственностью моей ViewModel; поэтому я должен был поместить атрибуты вокруг свойств офиса.

Это считается неправильной практикой? должен ли я повторять свойства, которые мне нужны из класса модели EF, в моем классе модели просмотра и отображать их вручную? звуки повторяющиеся ко мне ...

Спасибо за помощь.

Вот мой код:

ViewModel:

общественного класса NewOfficeViewModel { частный UnitOfWork UnitOfWork = новый UnitOfWork();

public NewOfficeViewModel() 
    { 
     var vendors = unitOfWork.VendorRepository.Get(); 
     var languages = unitOfWork.LanguageRepository.Get(); 
     var correspondences = unitOfWork.PreferredCorrespondenceRepository.Get(); 
     var provinces = unitOfWork.ProvinceRepository.Get(); 

     var culture = CultureHelper.GetCurrentCulture(); 

     Vendors = new SelectList(vendors, "VendorID", "Product"); 
     Languages = new SelectList(languages, "LangID", culture == "fr" ? "Text_fr" : "Text_en"); 
     Correspondences = new SelectList(correspondences, "PreferredCorrespondenceID", "PreferredCorrespondence1"); 
     Provinces = new SelectList(provinces, "ProvinceID", "Province1"); 
    } 

    public Office Office { get; set; } 
    public SelectList Provinces { get; set; } 
    public SelectList Vendors { get; set; } 
    public SelectList Languages { get; set; } 
    public SelectList Correspondences { get; set; } 


} 

EF Модель:

общественного частичного класса Офис { общественное управление() { this.ContactOffices = новый HashSet(); }

public int OfficeID { get; set; } 
    public Nullable<int> OfficePredefinedNumberID { get; set; } 
    public int OfficeTypeID { get; set; } 
    [LocalizedDisplayName("CompanyName")] 
    public string CompanyName { get; set; } 
    [LocalizedDisplayName("OfficeContact")] 
    public string OfficeContact { get; set; } 
    [LocalizedDisplayName("Address1")] 
    public string Address1 { get; set; } 
    [LocalizedDisplayName("Address2")] 
    public string Address2 { get; set; } 
    [LocalizedDisplayName("City")] 
    public string City { get; set; } 
    [LocalizedDisplayName("PostalCode")] 
    public string PostalCode { get; set; } 
    [LocalizedDisplayName("Phone")] 
    public string Phone { get; set; } 
    [LocalizedDisplayName("Fax")] 
    public string Fax { get; set; } 
    [LocalizedDisplayName("Email")] 
    public string Email { get; set; } 
    [LocalizedDisplayName("Language")] 
    public int LangID { get; set; } 
    [LocalizedDisplayName("PreferredCorrespondence")] 
    public int PreferredCorrespondenceID { get; set; } 
    [LocalizedDisplayName("Software")] 
    public int VendorID { get; set; } 
    public Nullable<System.DateTime> ProfileSentDate { get; set; } 
    public string OfficeNote { get; set; } 
    public int CreatedByContactID { get; set; } 
    public System.DateTime CreatedDate { get; set; } 
    public int ModifiedByContactID { get; set; } 
    public System.DateTime ModifiedDate { get; set; } 
    public int ChangeLogID { get; set; } 
    [DisplayName("Province")] 
    public int ProvinceID { get; set; } 
    public int StatusID { get; set; } 

    public virtual ICollection<ContactOffice> ContactOffices { get; set; } 
    public virtual Vendor Vendor { get; set; } 
    public virtual Province Province { get; set; } 
    public virtual OfficePredefinedNumber OfficePredefinedNumber { get; set; } 
    public virtual Status Status { get; set; } 
} 
+0

Есть ли причина, по которой вы украшаете поля EF с отображаемым именем и т. Д.? Обычно отображаемое имя будет значением, которое будет отображаться на вашей модели просмотра, а не на модели. Используете ли вы их как объекты вида? Я настоятельно рекомендую сопоставлять их с viewmodel (или моделью в MVC) и вместо этого использовать это - вы не должны использовать классы сущностей в качестве объектов модели. – Charleh

+1

Вам нужно построить классы «partial» для ваших объектов и атрибут свойств в них. –

+0

Разве это не потребует частичных свойств? – Charleh

ответ

1

вы не должны использовать свои рамочные сущность объектов/классов с точки зрения. вы должны создать модель представления (в основном сопоставление свойств от вашего объекта к модели/модели представления) и привязать его к представлению. вы также избегаете подобных проблем. Вы несколько побеждаете цель MVC - модельная часть архитектуры

+0

+1: Полностью согласен. –

+0

Я согласен с вами в использовании viewModel. и это то, что у меня есть. повторите мой вопрос, я его отредактировал, указав, почему я использую класс EF для своих свойств аннотации данных. Спасибо за помощь – user2964813

+0

, проблема заключается в том, что дизайнер перезаписывает ваши изменения. что ожидается при регенерации модели. он не должен резервировать ваши изменения, и вы также не должны добавлять такие вещи, если только вы, конечно, не поддержите его, не зарегистрируйте, а затем внесите изменения на место. вам нужно иметь view/viewmodel, который сопоставляется с сущностью и от нее –

Смежные вопросы