【发布时间】:2015-05-26 20:31:55
【问题描述】:
我正在使用 Entity Framework 6,代码优先,并使用 ObjectContext.Translate() 方法执行存储过程以填充对象列表。
我需要在存储过程中返回类的每个属性吗?或者我可以返回一些属性吗?
MSDN 文章 Directly Executing Store Commands 建议我应该能够返回 一些 属性:
如果类型属性的名称与 DbDataReader 的字段不匹配,则实体框架会具体化该属性的默认值(如果它是在概念模型中定义的)。
但是当我在存储过程中留下一个属性时,我得到一个错误。例如,假设 MyClass 具有 3 个属性:Id、Name、Description。如果我的存储过程返回以下内容:
SELECT Id, Name, Description from dbo.MyTable;
一切都很好。但是,如果我只返回两个属性,而忽略一个:
SELECT Id, Name from dbo.MyTable;
然后调用(其中“db”是 DbContext 的实例,“rdr”是 DbDataReader 的实例):
((IObjectContextAdapter)db).ObjectContext.Translate<MyClass>(rdr).ToList();
我收到错误消息“类型的成员‘描述’在数据读取器中没有同名的对应列。”
我误解了 MSDN 文章吗?我可以在调用 ObjectContext.Translate() 时从存储过程中返回 一些 属性吗?还是我必须始终返回所有属性?
或者“如果在概念(原文如此)模型中定义属性的默认值”这句话是否意味着我需要向我的模型类添加一些注释?
【问题讨论】:
标签: c# ef-code-first entity-framework-6