C# EF4和MVC3将视图模型映射到实体
我有一个EF4实体工作组。下面是该模型的元数据,以供参考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
[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; }