我试图让Entity Framework为自定义查询返回多个结果,然后让它映射回Entity Framework Code First模型。是否可以使用Entity Framework的内部映射引擎?
我可以保证结果集中两个查询返回的行直接映射到EF模型。作为内部要求,我无法使用存储过程。
public void MultipleResultSets()
{
var db = new DbContext();
var command = db.Database.Connection.CreateCommand();
command.Connection.Open();
command.CommandText =
@"
SELECT * FROM TableA;
SELECT * FROM TableB;
";
using (var reader = command.ExecuteReader())
{
// Map Table A rows
var tableARows = new List<TableARow>();
while (reader.Read())
tableARows.Add(reader.Map<TablARow>()); // "Map()" is not real
reader.NextResult();
// Map Table B rows
var tableBRows = new List<TableBRow>();
while (reader.Read())
tableARows.Add(reader.Map<TablBRow>()); // "Map()" is not real
}
command.Connection.Close();
}
答案 0 :(得分:2)
免责声明:我是该项目的所有者EF+。
以下是您可以从我的存储库中找到的扩展方法,该方法使用内部映射引擎来映射数据读取器。
public void MultipleResultSets()
{
var db = new DbContext();
var command = db.Database.Connection.CreateCommand();
command.Connection.Open();
command.CommandText =
@"
SELECT * FROM TableA;
SELECT * FROM TableB;
";
using (var reader = command.ExecuteReader())
{
// Map Table A rows
var tableARows = db.MapReader<TableA>(reader);
reader.NextResult();
// Map Table B rows
var tableBRows = db.MapReader<TableB>(reader);
}
command.Connection.Close();
}
然后您可以像这样使用您的代码:
int main(void) {
char qwe[] = "qwe";
// ^^^^^
qwe[2] = '\0';
printf("%s\n", qwe); // prints "qw"
return 0;
}
注意:扩展方法已更新为使用Pawel回答“ObjectContext.Translate”