但是现在发现无法使用 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 语句
这个情况应该怎么办?
12 个解决方案
#1
怎么没人?自己顶一下
#2
db.Database.ExecuteSqlCommand();
#3
context.Database.SqlQuery<string>("select now()")
http://mhenrikson.blogspot.in/2011/06/execute-sql-with-entity-framework-4.html
http://mhenrikson.blogspot.in/2011/06/execute-sql-with-entity-framework-4.html
#4
EntityCommand 是对应的数据库 Command 的代理,可直接运行sql代码,只是参数名称不能包含特殊符号(如@),因它会自动转换。
#6
db 有 Database 这个属性,但是字是 string 类型,没有 ExecuteSqlCommand 这个方法啊
#7
context.Database 是 string 类型,没有 SqlQuery 这个方法啊
#8
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);
}
}
#9
因为EF无法使用sql语句,建议你建视图获取对象和数据.
不知道你的数据有没有什么特殊的?是否考虑过把动态表转换成实体表.?
不知道你的数据有没有什么特殊的?是否考虑过把动态表转换成实体表.?
#10
我的那部分表是动态生成的,在数据库里记录了这些表的表名以及它们的各个字段名、字段类型等信息,需要在程序运行时动态地创建查询语句。表的结构是客户在使用时订制的,程序开发时不可能知道最终运行时那些表叫什么,有哪些字段,字段时什么类型。
#11
版主,我用的是 MySQL,不是SQL Server
另外,这种查询要求指定返回类型,如果我查的不是当前时间,而是一个表,并且这个表是在运行时动态创建的,我就无法指定返回类型了。
#12
好象此题无解了,只能用 MySQL Ado.net
#1
怎么没人?自己顶一下
#2
db.Database.ExecuteSqlCommand();
#3
context.Database.SqlQuery<string>("select now()")
http://mhenrikson.blogspot.in/2011/06/execute-sql-with-entity-framework-4.html
http://mhenrikson.blogspot.in/2011/06/execute-sql-with-entity-framework-4.html
#4
EntityCommand 是对应的数据库 Command 的代理,可直接运行sql代码,只是参数名称不能包含特殊符号(如@),因它会自动转换。
#5
#6
db 有 Database 这个属性,但是字是 string 类型,没有 ExecuteSqlCommand 这个方法啊
#7
context.Database 是 string 类型,没有 SqlQuery 这个方法啊
#8
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);
}
}
#9
因为EF无法使用sql语句,建议你建视图获取对象和数据.
不知道你的数据有没有什么特殊的?是否考虑过把动态表转换成实体表.?
不知道你的数据有没有什么特殊的?是否考虑过把动态表转换成实体表.?
#10
我的那部分表是动态生成的,在数据库里记录了这些表的表名以及它们的各个字段名、字段类型等信息,需要在程序运行时动态地创建查询语句。表的结构是客户在使用时订制的,程序开发时不可能知道最终运行时那些表叫什么,有哪些字段,字段时什么类型。
#11
版主,我用的是 MySQL,不是SQL Server
另外,这种查询要求指定返回类型,如果我查的不是当前时间,而是一个表,并且这个表是在运行时动态创建的,我就无法指定返回类型了。
#12
好象此题无解了,只能用 MySQL Ado.net