我是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]'
答案 0 :(得分:1)
我不知道您是在做CodeFirst
,ModelFirst
还是DatabaseFirst
。但听起来这些属性的名称为Subcontract
和Employee
,而不是Subcontracts
和Employees
。
如果是这样,您的查询应该
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") // ...