EF4:为什么不使用表映射Translate()?

时间:2010-12-07 09:44:52

标签: c# entity-framework entity-framework-4 mapping poco

如果我有db表:

CREATE TABLE MyTable
(
MyTableId INT PRIMARY KEY,
MyTableName CHAR(10)
)

和实体框架4中的实体(POCO,自我跟踪)定义为:

MyTable - maps to MyTable table
 - Id - maps to MyTableId
 - Name - maps to MyTableName

为什么这个查询:

SqlConnection conn = (SqlConnection)((EntityConnection)context.Connection).StoreConnection;
conn.Open();
SqlCommand cmd = new SqlCommand("SELECT * FROM MyTable", conn);
DbDataReader result = cmd.ExecuteReader();
var objResult = context.Translate<MyTable>(result);

失败说:

The data reader is incompatible with the specified 'Project1.MyTable'. A member of the type, 'Id', does not have a corresponding column in the data reader with the same name.

Translate方法不应该考虑edmx中定义的表映射吗?有没有办法让这项工作没有在查询中明确定义列?

1 个答案:

答案 0 :(得分:0)

MSDN说:

  

Translate方法可让您使用   执行标准的ADO.NET查询   针对数据源并进行翻译   返回的数据行为实体   对象。

     

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

它是否按名称或通过地图进行映射并不明确,但由于此ADO.NET查询不是实体查询(因此并未严格依赖于抽象层) ),似乎合理它可能会忽略它并选择属性名称匹配。

我想知道您是否应该编写ESQL store query而不是TSQL数据库查询?我希望通过模型映射ESQL查询 。这应该相当简单;它可能只是

var objResult = context.ExecuteStoreQuery<TEntity>(@"select * from MyTable");