C# 类型为&x27的成员;PropertyName';,在数据读取器中没有同名的对应列

C# 类型为&x27的成员;PropertyName';,在数据读取器中没有同名的对应列,c#,ef-code-first,entity-framework-6,C#,Ef Code First,Entity Framework 6,我使用EntityFramework6,先编写代码,然后使用ObjectContext.Translate()方法执行一个存储过程来填充对象列表 我是否需要返回存储过程中类的每个属性?或者我可以返回一些属性吗 MSDN文章建议我应该能够返回一些属性: 如果类型属性的名称与DbDataReader的字段不匹配,则实体框架将具体化在概念模型中定义的属性的默认值 但是,当我将一个属性保留在存储过程之外时,我会得到一个错误。例如,假设MyClass有3个属性:Id、名称、描述。如果我的存储过程返回以下内

我使用EntityFramework6,先编写代码,然后使用ObjectContext.Translate()方法执行一个存储过程来填充对象列表

我是否需要返回存储过程中类的每个属性?或者我可以返回一些属性吗

MSDN文章建议我应该能够返回一些属性:

如果类型属性的名称与DbDataReader的字段不匹配,则实体框架将具体化在概念模型中定义的属性的默认值

但是,当我将一个属性保留在存储过程之外时,我会得到一个错误。例如,假设MyClass有3个属性:Id、名称、描述。如果我的存储过程返回以下内容:

SELECT Id, Name, Description from dbo.MyTable;
一切都很好。但如果我只返回两个属性,而不返回其中一个:

SELECT Id, Name from dbo.MyTable;
然后调用(其中“db”是DbContext的实例,“rdr”是DbDataReader的实例):

((IObjectContextAdapter)db.ObjectContext.Translate(rdr.ToList();
我收到错误消息“类型为'Description'的成员在数据读取器中没有同名的对应列。”

我是否误解了MSDN文章?调用ObjectContext.Translate()时,是否可以从存储过程返回一些属性?还是必须始终返回所有属性


或者短语“如果属性是在概念(sic)模型中定义的,则具体化属性的默认值”是否意味着我需要向模型类添加一些注释?

如果ObjectContext.Translate要求所有属性都存在

提供的DbDataReader必须包含映射到请求的实体类型的数据


问题似乎出在这里:我的项目缺少“概念模型”。也就是说,我使用的是普通的旧clr对象(POCO),没有使用实体数据模型向导生成*.edmx文件

正如MSDN所述:

如果类型属性的名称与DbDataReader的字段不匹配,则实体框架将具体化在概念模型中定义的属性的默认值

因为我没有概念模型,所以我假设这就是实体框架没有为我“具体化默认值”的原因,而是抛出了一个异常

我假设,如果我生成了*.edmx文件(由于各种原因,我无法在本项目中这样做),并使用这些实体而不是我的POCO实体,则错误消息将消失

((IObjectContextAdapter)db).ObjectContext.Translate<MyClass>(rdr).ToList();