Entity framework 无法执行Context.Entity.SqlQuery实体框架
我无法在实体框架中执行原始Sql Where查询 型号:Entity framework 无法执行Context.Entity.SqlQuery实体框架,entity-framework,entity-framework-4,Entity Framework,Entity Framework 4,我无法在实体框架中执行原始Sql Where查询 型号: public partial class Web_User_Setup_Header { public byte[] timestamp { get; set; } public string User_ID { get; set; } public bool Enable { get; set; } public System.DateTime Expiration_Date { get; set; }
public partial class Web_User_Setup_Header
{
public byte[] timestamp { get; set; }
public string User_ID { get; set; }
public bool Enable { get; set; }
public System.DateTime Expiration_Date { get; set; }
}
Fluent模型实体配置:
public class Web_User_Setup_HeaderConfigruation : EntityTypeConfiguration<Web_User_Setup_Header>
{
public Web_User_Setup_HeaderConfigruation()
{
ToTable("Web User Setup Header");
HasKey(x => x.User_ID).Property(x => x.User_ID).HasColumnName("User ID");
Property(x => x.Expiration_Date).HasColumnName("Expiration Date");
}
}
其中HttpContext.Items[公司]=Sachin Sales
和uid=web
当我执行上面的查询时,它给出的错误是:无效的列名“User\u ID”
当我在查询中将User_ID更改为[User ID]时,会出现如下错误:
数据读取器与指定的“JSTestWeb.Models.Web\u User\u Setup\u Header”不兼容。“User_ID”类型的成员在数据读取器中没有同名的对应列
有人能解释一下这件事吗?但是,数据库字段名仅在数据库中为[User ID],我无法更改它。您可以使用它来构建动态查询。但是您需要使用ObjectContext API来执行ESQL
public class MyContextTest : DbContext
{
public virtual ObjectContext UnderlyingObjectContext
{
get
{
return ((IObjectContextAdapter)this).ObjectContext;
}
}
}
查询语法与SQL略有不同
Web_User_Setup_Header WebSetup = context.UnderlyingObjectContext
.CreateQuery<Web_User_Setup_Header>("Select VALUE C from [" +
Convert.ToString(HttpContext.Items["Company"]) +
"$Web User Setup Header] AS C where C.[User ID]=@p0",
new ObjectParameter("p0", uid)).SingleOrDefault();
所以我不能直接从[+Convert.toStringttpContext.Items[Company]+$Web User Setup Header]中选择*其中User_ID=@p0。有没有办法让它直接工作?顺便说一句,我尝试了你的解决方案,但仍然有错误:好吧,我的坏,我必须包括所有列。但它现在返回空值。但是如果有50列呢。我是否必须全部键入::。这是我不想从ORM那里得到的东西?我是否可以从tablename中获取Select*,其中条件='abc'在该场景中正常工作
Web_User_Setup_Header WebSetup = context.UnderlyingObjectContext
.CreateQuery<Web_User_Setup_Header>("Select VALUE C from [" +
Convert.ToString(HttpContext.Items["Company"]) +
"$Web User Setup Header] AS C where C.[User ID]=@p0",
new ObjectParameter("p0", uid)).SingleOrDefault();