0

エンティティフレームワークでRawSqlWhereクエリを実行できません。

モデル :

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 Model Entity Configuraiton:

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

私が実行しているSQLクエリは次のとおりです。

 Web_User_Setup_Header WebSetup = context.Web_User_Setup_Headers.SqlQuery("Select * from [" + Convert.ToString(HttpContext.Items["Company"]) +
                 "$Web User Setup Header] where User_ID=@p0", uid).SingleOrDefault();

どこHttpContext.Items["Company"] = "Sachin Sales"

uid = "web"

上記のクエリを実行すると、次のようなエラーが発生します。Invalid column name 'User_ID'.

クエリでに変更User_IDする[User ID]と、次のようなエラーが発生します。

The data reader is incompatible with the specified 'JSTestWeb.Models.Web_User_Setup_Header'. A member of the type, 'User_ID', does not have a corresponding column in the data reader with the same name.

誰かがこの問題に光を当てることができますか?ただし、データベースフィールド名は[User ID]データベースにのみ存在し、変更できません。

4

1 に答える 1

0

ESQLを使用して動的クエリを作成できます。ObjectContextただし、 ESQLを実行するにはAPIを使用する必要があります。

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();
于 2012-04-13T06:46:45.037 に答える