我有以下表格: -
但是如何在我的asp.net mvc4 web应用程序中创建一个视图模型类,这样如果我传递AccountDefinition.OrgID,我可以检索以下内容: -
•accountDefinition
•SDOrganization
•SDOrgPostalAddr
•AaaPostalAddress
我创建了以下CustomerDetails ViewModel
public class CustomerDetails
{
public AccountDefinition AccountDefinition {get; set;}
public SDOrganization SDOrganization {get; set;}
public virtual ICollection<AaaPostalAddress> AaaPostalAddress { get; set; }
public virtual ICollection< SDOrgPostalAddr> AaaPostalAddress { get;set; }
}
我有以下Repository方法,它应该根据ORG_ID填充CustomerDetails: -
public CustomerDetails GetCustomer(int ORG_id) {
CustomerDetails cd = new CustomerDetails();
var cd = from SDorg in cd.AccountDefinition // here I will b populating the CustomerDetials
}
我的第二个问题,因为我有数据库经验,我会做一个存储过程,将表连接在一起然后返回结果!!!,但因为我使用实体框架所以我对如何这样做?
BR
答案 0 :(得分:1)
如果您已经从数据库模式创建了实体框架模型,那么您应该:
具有AccountDefinition
引用导航属性的AccountDefinition.SDOrganization
类,因为两者之间的关系显然是一对一的
SDOrganization.AaaPostAddresses
集合导航属性,因为该关系是多对多关系。 SDOrgPostalAddr
表不应显示为模型实体,因为它只是多对多链接表
使用此模型并将视图模型更改为...
public class CustomerDetails
{
public AccountDefinition AccountDefinition {get; set;}
public SDOrganization SDOrganization {get; set;}
public ICollection<AaaPostalAddress> AaaPostalAddresses { get; set; }
}
...您应该能够使用以下方式获得结果:
var customerDetails = context.AccountDefinitions
.Where(a => a.OrgID == givenOrgID)
.Select(a => new CustomerDetails
{
AccountDefinition = a,
SDOrganization = a.SDOrganization,
AaaPostalAddresses = a.SDOrganization.AaaPostalAddresses
})
.SingleOrDefault();
您还可以通过急切加载 AccountDefinition
实体以及所需的导航属性来获取相同的数据:
var accountDefinition = context.AccountDefinitions
.Include(a => a.SDOrganization.AaaPostalAddresses)
.SingleOrDefault(a => a.OrgID == givenOrgID);