簡體   English   中英

將AutoMapper與EF6 DbFirst和存儲過程一起使用(復雜類型)

[英]Using AutoMapper with EF6 DbFirst and Stored Procedure (complex types)

我正在使用Entity Framework 6 DBFirst,MVC5和AutoMapper。

我有2個表,Customers和CustomerContacts對於Entity Framework EDMX(自動生成)中的每個類,我都有一個具有完全相同屬性的Model類。 即客戶=> Model.Customer,客戶聯系人=> Model.CustomerContact。 這就是為什么我使用AutoMapper。

問題1:由於我的Customer_Get存儲過程返回了自動生成的復雜類型(Customer_Get_Result),因此大多數人還會為此添加一個附加的模型類嗎? (Model.Customer_Get_Result.cs)還是應該合並所有屬性,從而將所有內容添加到Model.Customer?

問題2:我處理以下“客戶聯系人”映射的方式是否正確? 除我放置在Model.Customer中的文件外,大多數Model.Customer中的每個屬性都與AutoGenerated EF6 DBFirst文件完全相同:

public List<CustomerContact> Contacts { get; set; }

最后,我希望能夠使用Customer.Contacts自動獲取所有Customer聯系人的列表

在我的AutoMapper中,我正在嘗試執行以下操作,但認為這是不正確的:

    CreateMap<Customer, Model.Customer>()
        .ForMember(dest => dest.Contacts, opt => opt.MapFrom(src => src.CustomerContact));

    //map for customer getlist stored proc which will be returning several fields
    //such as TotalCount, RowNumber, fields from a bunch of other tables
    CreateMap<Customer_Get_Result, Model.Customer>();

對於存儲過程的復雜類型(Customer_Get_Result),大多數人還會為此添加一個附加的模型類嗎?

如果它的屬性與Customer完全相同,那么我可能不會僅為其創建模型,而是將其映射到現有模型。

盡管這取決於您對Model類的處理方式,以及從實體映射的數據的用例是否不同於從存儲過程映射的數據的用例。 模型只是POCO的幻想術語。 模型通常是兩件事之一。 實體的簡化,比EF實體更接近POCO; 例如DTO,您可能會在業務層和數據庫層之間使用。 或它是針對特定上下文的專業化,例如ViewModel,它僅具有特定視圖所需的屬性,並且通常包括特定於UI的數據注釋之類的內容。

這很大程度上取決於您的應用程序如何分層以及應用程序的哪個部分正在檢索數據,以及它打算如何處理該數據。 就是說,我可能會從僅使用相同的模型開始,看看以后是否需要重構(但是您仍然需要2個映射,其中1個來自SP_Complex_Type-> Model,1個是Entity-> Model)。

看起來您的DB / EF模型只有來自Customer.CustomerContact的單個相關聯系人,但是您的模型具有一對多的關系Model.Customer.Contacts 由於您未向我們提供有關您實體的任何聲明,因此我僅基於屬性名稱的復數形式。 無論哪種方式,EF實體支持的關系與模型支持的關系都不匹配 您可以在這里使用AutoMapper進行很多不同的操作,但是您無法做出決定,除非您弄清楚為什么一個人具有相關聯系人列表,而另一個人只有一個相關聯系人。

CreateMap<Customer, Model.Customer>()
        .ForMember(dest => dest.Contacts, opt => opt.MapFrom(src => src.CustomerContact));

當將列表映射到列表時,並且屬性的名稱不同,那么以上正是您要做的。 另外,如果每個列表中的類型都不同,則還需要確保先前聲明的映射也適用於這些類型。 例如,如果要從List<CustomerContactEntity>轉到List<CustomerContactModel>則需要已經完成CreateMap<CustomerContactEntity,CustomerContactModel>以告訴AutoMapper可以轉換這些類型。 這樣,當它遇到列表中的每個項目時,將看到它具有該子類型的映射。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM