0

我有以下表格: - 在此处输入图像描述

但是我如何在我的 asp.net mvc4 Web 应用程序中创建一个视图模型类,这样如果我通过 AccountDefinition.OrgID 我可以检索以下内容:-

• 帐户定义

• SD 组织

• SDOrgPostalAddr

• Aaa邮政地址

我创建了以下 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; }

    }

我有以下存储库方法,它应该根据 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

4

1 回答 1

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);
于 2013-07-07T16:21:39.683 回答