C# EF4和MVC3将视图模型映射到实体

C# EF4和MVC3将视图模型映射到实体,c#,entity-framework-4,asp.net-mvc-3,C#,Entity Framework 4,Asp.net Mvc 3,我有一个EF4实体工作组。下面是该模型的元数据,以供参考 [MetadataType(typeof(WorkgroupMetaData))] public partial class Workgroup { public Contact manager { get; set; } } [Bind(Exclude = "id")] public class WorkgroupMetaData { [ScaffoldColumn(false)] public int

我有一个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; }
}
公共类工作组视图模型
{
公共工作组工作组{get;set;}
公共列表工作组{get;set;}
}
在视图中,我有一个网格来转储可用的工作组。这是可行的,但我想知道如何将ID字段转换为另一个表中的实际字符串。基本上,经理、客户联系人、潜在客户都是对联系人实体的引用。我想显示联系人的姓名,而不仅仅是id


如何做到这一点?我环顾了一下四周,但似乎找不到任何建议或答案。也许我从错误的角度来看这个问题?

你可以考虑在工作组(装饰器模式)或元组中使用包装器,或者创建一个将它们绑定在一起的自定义类。
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; }
列出工作组{get;set;}

列出工作组{get;set;}

哦。。。除了实际的类型,您还可以为Manager、Customer等使用字符串。然后,查询语法将是:select Tuple.Create(w、m.Name、c.LastFirst、l.DomainName)或类似内容……查找AutoMapper以查看它是否对您有帮助。
List<WorkgroupDisplayModel> Workgroups { get; set; }