我正在使用EF5并使用他们的代码生成器我生成了POCO类。以下是一个例子:
public partial class School
{
public string SchoolState;
public List<string> SchoolRankings;
void AddSchoolRanking()
{
...
}
}
现在,凭借整个POCO概念,我相信您可以将它们用作业务对象,因此我计划在此类中添加一些自定义属性和方法。我这样做的方法是将它扩展到另一个.cs文件中,因为它是一个像下面的部分类
List<School> s = new List<School>();
using (SchoolContext ctxt = new SchoolContext())
{
s = (from a in ctxt.Schools
where a.InternalID == id
select new School
{
...
}).ToList();
}
现在,以下查询返回“无法在LINQ to Entities查询中构造实体或复杂类型'Student'。”
laptops.json
当整个问题是能够在此类查询中无缝使用POCO以及解决此问题的正确方法时,出现此错误的原因是什么?
由于
答案 0 :(得分:1)
EF会尝试将您的类的属性映射到源数据中的列。
如果使用不在数据源中的属性扩展类,则需要告知EF不要尝试通过添加[NotMapped]
属性来映射它们:
public partial class School
{
[NotMapped]
public string SchoolState {get; set;}
[NotMapped]
public List<string> SchoolRankings;
void AddSchoolRanking()
{
...
}
}
您也不应该在EF查询中创建 new 实体,而只是让EF进行创建和映射:
s = (from a in ctxt.Schools
where a.InternalID == id
select a).ToList();
您可以将EF实体投影到其他非实体类类型,但这些实例与上下文没有任何关联(这意味着您无法将更改推送回数据库)。
请注意,我还将您的SchoolState
字段更改为属性 - 通常不建议使用公共字段。