0

モデル (EF によって生成された) フィールドの周りにいくつかの属性を追加しました (例: [DisplayName("Office Contact")]) データベースからモデルを更新すると、モデル クラスが再生成され、明らかにそれらの属性が失われます。

これを回避する方法はありますか?

ありがとう。

EF モデルで属性を使用する理由は次のとおりです。

EF モデル: Office.cs my ViewModel: NewOfficeViewModel.cs

しかし、Office は私の viewModel のプロパティです。そのため、代わりにオフィス プロパティの周りに属性を配置する必要がありました。

これは間違った慣行と見なされますか? ビュー モデル クラスの EF モデル クラスから必要なプロパティを繰り返し、手動でマップする必要がありますか? 私には繰り返し聞こえる...

助けてくれてありがとう。

これが私のコードです:

ビューモデル:

public class NewOfficeViewModel { private UnitOfWork unitOfWork = new 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 モデル:

public partial class Office { public Office() { this.ContactOffices = new 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; }
}
4

1 に答える 1

1

ビューでエンティティ フレームワーク オブジェクト/クラスを使用しないでください。ビューモデルを作成し(基本的にエンティティからモデル/ビューモデルにプロパティをマッピングする)、それをビューにバインドする必要があります。このような問題も回避できます。MVC の目的 (アーキテクチャのモデル部分) をやや無効にしています。

于 2013-11-08T14:47:54.323 に答える