与Linq一起使用“Include”的异常(获取子表)

时间:2012-01-10 20:23:48

标签: linq entity-framework

我是linq和EF的新手,我有这个型号:

公司0 - N合同

合同0 - N分包合同

合同0 - N名员工

因此,为了获得单个数据库调用的所有记录,我尝试使用“Include”:

var list= from comp in Db.Company
          from cont in Db.Contract.Include("Subcontract").Include("Employee")
          select new CustomObject
          {
             SomeInfo = comp.SomeInfo,
             .
             .
             .
             Contract = cont
          };

但抛出了下一个异常:

Method 'System.Data.Entity.Infrastructure.DbQuery`1[Account.Models.Contract] Include(System.String)' declared on type 'System.Data.Entity.Infrastructure.DbQuery`1[Account.Models.Contract]' cannot be called with instance of type 'System.Data.Objects.ObjectQuery`1[Account.Models.Contract]'

1 个答案:

答案 0 :(得分:1)

描述

我不知道您是在做CodeFirstModelFirst还是DatabaseFirst。但听起来这些属性的名称为SubcontractEmployee,而不是SubcontractsEmployees

如果是这样,您的查询应该

from cont in Db.Contracts.Include("Subcontract").Include("Employee")

//

from count in Db.Contracts.Include("NameOfThePropertyNotTheTableName")

这是因为Entity Framework中的默认复数。

您可以使用

禁用多元化
protected override void OnModelCreating(ModelBuilder modelBuilder)
{    
    modelBuilder.Conventions.Remove<PluralizingTableNameConvention>();
}

更多信息

更新

如果你改变了

public partial class ML_Contratos
{
    public Nullable<int> idempresa { get; set; }

    public ML_Empresas ML_Empresas { get; set; }
}

你应该可以做到

from cont in Db.ML_Contratos.Include("ML_Empresas") // ...