Entity framework 无法执行Context.Entity.SqlQuery实体框架

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; }

我无法在实体框架中执行原始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; }
}
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();