如果我有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中定义的表映射吗?有没有办法让这项工作没有在查询中明确定义列?
答案 0 :(得分:0)
MSDN说:
Translate方法可让您使用 执行标准的ADO.NET查询 针对数据源并进行翻译 返回的数据行为实体 对象。
提供的DbDataReader必须包含 映射到请求实体的数据 类型。
它是否按名称或通过地图进行映射并不明确,但由于此ADO.NET查询不是实体查询(因此并未严格依赖于抽象层) ),似乎合理它可能会忽略它并选择属性名称匹配。
我想知道您是否应该编写ESQL store query而不是TSQL数据库查询?我希望通过模型映射ESQL查询 。这应该相当简单;它可能只是
var objResult = context.ExecuteStoreQuery<TEntity>(@"select * from MyTable");