簡體   English   中英

EF4和MVC3將ViewModels映射到實體

[英]EF4 and MVC3 mapping ViewModels to Entities

我有一個EF4實體工作組。 以下是該模型的元數據,以供參考。

    [MetadataType(typeof(WorkgroupMetaData))]
public partial class Workgroup {
    public Contact manager { get; set; }
}

[Bind(Exclude = "id")]
public class WorkgroupMetaData
{
    [ScaffoldColumn(false)]
    public int id { get; set; }

    [DisplayName("Org. Number")]
    [Required(ErrorMessage = "Org. Number is required.")]
    public string org_number { get; set; }

    [DisplayName("Workgroup Name")]
    [Required(ErrorMessage = "Workgroup name is required.")]
    public string name { get; set; }

    [DisplayName("Customer Contact")]
    public int customer_contact_id { get; set; }

    [DisplayName("Manager")]
    public int manager_id { get; set; }

    [DisplayName("Tech. Lead")]
    public int lead_id { get; set; }

    [DisplayName("Time Approver")]
    public int time_approver { get; set; }

    [DisplayName("Description")]
    public string description { get; set; }

    [ScaffoldColumn(false)]
    public object created_at { get; set; }

    [ScaffoldColumn(false)]
    public object last_modified_at { get; set; }
}

我有一個ViewModel定義為:

    public class WorkgroupViewModel
{
    public Workgroup Workgroup { get; set; }
    public List<Workgroup> Workgroups { get; set; }
}

在視圖上,我有一個網格可以轉儲可用的工作組。 這有效,但我想知道如何將ID字段轉換為另一個表中的實際字符串。 基本上,經理,customer_contact,lead都是對Contact實體的引用。 我想顯示聯系人的姓名,而不只是ID。

如何做到這一點? 我環顧了一下,但似乎找不到建議或答案。 也許我從錯誤的角度看待這個問題?

您可能會考慮在Workgroup(裝飾器模式)或Tuple周圍使用包裝器,或創建將它們綁定在一起的自定義類。

public class WorkgroupDisplayModel
{
    public Workgroup Workgroup { get; set; }
    public Manager Manager { get; set; }
    // Add additional properties for each related type
}

在EF查詢中,您可以執行以下操作:

var query = from w in Context.Workgroups
            join m in Context.Managers
                on w.manager_id equals m.uid
            // Additional joins for each related table
            where w.Description == "Project 1" // Whatever criteria
            select Tuple.Create(w, m); // Add param for each type
            //or
            //select new WorkgroupDisplayModel { Workgroup = w, Manager = m, ... };
var list = query.ToList();
var contact = list[0].Item1; // Tuple has strongly typed Item1 thru ItemN
var manager = list[0].Item2;

然后,您的視圖模型可能具有:

List<Tuple<Workgroup, Manager, Customer, Lead>> Workgroups { get; set; }

要么

List<WorkgroupDisplayModel> Workgroups { get; set; }

暫無
暫無

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

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