[英]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.