日期:2014-05-17  浏览次数:21122 次

EF 连接到 MySQL 如何执行普通的查询??
由于我的数据库中有一部分表是动态生成的,因此没有为它生成实体类,在实际应用中是根据记录到表中的信息动态地生成create table, insert, update, delete, select 语句的

但是现在发现无法使用 EF 中得到的连接创建 DbCommand 进行普通的查询
using (DAL.PrintsysEntities db = new DAL.PrintsysEntities()) {
System.Data.Common.DbConnection conn = db.Connection;
using (System.Data.Common.DbCommand cmd = conn.CreateCommand()) {

cmd.CommandText = "select now()";

if (conn.State != ConnectionState.Open)
conn.Open();
using (System.Data.Common.DbDataReader reader = cmd.ExecuteReader()) {
if (reader.Read()) {
object now = reader.GetDateTime(0);
}
}
}
}


db.Connection 返回的是 System.Data.EntityClient.EntityConnection 类型 
用它得到的 Command 是 System.Data.EntityClient.EntityCommand 类型
用它们无法执行普通的 sql 语句

这个情况应该怎么办?

------解决方案--------------------
db.Database.ExecuteSqlCommand();
------解决方案--------------------
EntityCommand 是对应的数据库 Command 的代理,可直接运行sql代码,只是参数名称不能包含特殊符号(如@),因它会自动转换。
------解决方案--------------------
http://www.cnblogs.com/wintersun/archive/2010/12/12/1903861.html
------解决方案--------------------
void Main() 

 
  var constr = @"Data Source=.;Initial Catalog=Northwind;Integrated Security=True"; 
  var context = new DataContext(constr) ; 
   
 string[] ss=context.ExecuteQuery<string>("select now()").ToArray(); 
 foreach(string s in ss) 
 { 
   Console.WriteLine(s); 
 } 
   
               
}
 
------解决方案--------------------
因为EF无法使用sql语句,建议你建视图获取对象和数据.

不知道你的数据有没有什么特殊的?是否考虑过把动态表转换成实体表.?