2011-02-09 4 views
3

이제 모든 huffy를 얻지 마십시오. 이는 매우 특정한 상황에서만 발생합니다. 따라서 EF를 통해 인라인 문자열 SQL을 보내려는 이유를 묻는 것보다는 "how"라는 주제에 계속 머물러보십시오.엔티티 프레임 워크에서 일반 인라인 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은 내가 그것을 알고 있지만 필요하지 않습니다. 나는 LINQ 99.9 %의 시간을 사용하고 있는데 이것은 하나의 특정 인스턴스에 대한 것입니다. 빠른 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; } 
} 
관련 문제