繁体   English   中英

实体框架代码优先查询

[英]Entity Framework Code First Query

这是我的桌子(公司)

Companyid   Company_Name  ParentCompany_ID
957         Company1      6211
4816        Company2      Null
1922        Company3      7565
6211        Company4      Null

这是我的HTML。

               <div class="responsive-table">
                    <div class="row-width desktop-header">                           
                        <div class="col-md-5">Company</div>
                        <div class="col-md-5">Parent Company</div>
                    </div>
                    <div class="list-font row" data-ng-repeat="company in vm.companies">
                        <div class="col-md-2">
                            <div class="mobile-header">Name:</div>
                        </div>                            
                        <div class="col-md-5">
                            <div class="mobile-header">Parent Company:</div>
                        </div>
                    </div>
                </div>

我需要从“公司”表中检索“名称”和“母公司”名称。 这是我的代码。

private List<Company> GetCompany()
    {
        return dbContext.Companies
                .Where(p => p.Id == ID)                   
                .ToList();
    }

在主要功能中,我有这样的事情

List<Company>company = GetCompany();
Result = new CompanyModel()
{ 
    Name = company.Name
};

我对如何检索母公司名称有些困惑。

编辑:概念是,如果ParentCompany_Id不为null,则其母公司为companyid。 例如,在表中,957是子公司,6211是母公司。 在第二行中,由于ParentCompany_Id为null,因此4816是母公司。 因此,我需要从同一张表中检索公司名称和ParentCompany名称。

private Company GetCompany()
{
        return dbContext.Companies
                .Where(p => p.Id == ID)                   
                .FirstOrDefault();
}

接着,

string ParentCompanyId = GetCompany().ParentCompany_ID;

您的方法GetCompany应该是Company类型而不是List<Company> ,因为它通过Id返回结果,所以使用id参数更容易调用它:

private static Company GetCompany(id)
 {
         if(id == null) return new Company();
         var company = dbContext.Companies
                                .SingleOrDefault(p => p.Id == id);
          return company;     
}

现在您可以轻松创建模型:

var company = GetCompany(957);
var result = new CompanyModel()
             { 
                Name = company.Name,
                ParName = GetCompany(company.ParentCompany_ID).Name
              };

鉴于您的实体可能会包含比名称更多的详细信息,包括相关数据等。

public class Company
{
   public int CompanyId { get; set; }
   public string CompanyName { get; set; } 
   public int? ParentCompanyId { get; set; }
   [ForeignKey("ParentCompanyId")]
   public virtual Company ParentCompany { get; set; }
}

然后给出通过ID检索公司的信息。

var company = dbContext.Companies.SingleOrDefault(c=> c.CompanyId == id);
// where company != null...

//lazy load the parent...
var parent = company.ParentCompany;

//eager load parent with company...
var company = dbContext.Companies
    .Where(c => c.CompanyId == id)
    .Include(c => c.Parent)
    .SingleOrDefault();

// better, if you know the view model you want...
var viewModel = dbContext.Companies
    .Where(c => c.CompanyId == id)
    .Select(c => new CompanyViewModel 
    { 
        c.CompanyId, 
        c.CompanyName, 
        ParentCompanyName = c.ParentCompany != null 
          ? c.ParentCompany.CompanyName 
          : string.Empty 
    }).SingleOrDefault();

最后一个示例来自内存,可能需要进行一些调整,但是明确显示所检索的值的好处是可以最大程度地减少通过导线发送的数据。 对于小型域对象,不必理会,但对于较大的复杂对象图,可以节省很多性能。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM