2011-02-09 9 views
3

今すぐすべてのhuffyを取得しないでください。これは非常に特殊な状況のためだけです。だから、なぜ私がEFを通してインライン・ストリングSQLを送信したいのかを尋ねるのではなく、単に「どのように」のトピックに留もうとしましょう。エンティティ・フレームワークで通常のインラインSQLを送信する方法

通常の古いADO.NETを使用して旧式のルートを実行する必要がありますか、またはEFがSQL Select/Nonqueryを実行する方法を提供していますか?

ありがとうございます。

答えて

3

Entity SQLについて調査しましたか?

Entity Framework Q&A

string city = "London"; 
using (Entities entities = new Entities()) 
{ 
    ObjectQuery<Customers> query = entities.CreateQuery<Customers>(
    "SELECT VALUE c FROM Customers AS c WHERE c.Address.City = @city", 
    new ObjectParameter("city", city) 
); 

    foreach (Customers c in query) 
    Console.WriteLine(c.CompanyName); 
} 

エンティティSQLは現在、DML構築物の任意 を欠いているので、それは 問題挿入、更新することはできません、またはエンティティSQLを使用して コマンドを削除し、 サービス

+0

はい、エンティティSQLは、私はそれを認識していても、私は必要なものではありません。私は時間の99.9%のLINQを使用していますが、これは特定のインスタンスの1つです。私はちょうど簡単なADO.NETインターフェイスを設定する必要があるように見えます。答えをありがとう。 – Chev

+0

私はADO.NETにそれをさせると言うでしょう。私は最近、あなたが求めているのと同様の状況を抱えていました。簡単で洗練されたADO.NETを素早く実際に実行して処分できるようにしました。私の提案 – PsychoCoder

+0

ObjectQuery <>の代わりにSqlQuery <>を使用している場合、ObjectParametersがSqlParametersになるように注意してください –

1

としてオブジェクトの代替ObjectQuery複数のデータベーステーブルをまたがるオプションが必要な場合は、context.Database.SqlQuery<>SqlParameterを使用してください。

例:

var searchId = new Guid("16144A52-A092-4876-9C55-A0AD0109F08A"); 

var sqlparam = new SqlParameter("sid", searchId); 

using (var context = new Entities()) 
{ 
    var sql = @"SELECT t1.Name, t2.ChildName 
     FROM dbo.Table1 as t1 
     INNER JOIN dbo.Table1 as t2 
      ON t1.Id = t2.ParentId 
     WHERE t1.Id = @sid" 

    var result = context.Database.SqlQuery<Combined>(sql, sqlparam); 

    foreach(var r in result) 
    { 
     Console.WriteLine(r.Name + r.ChildName) 
    } 
} 


public class Combined 
{ 
    public string Name { get; set; } 
    public string ChildName { get; set; } 
} 
関連する問題