Как отправить обычный встроенный SQL в сущности - PullRequest
3 голосов
/ 09 февраля 2011

Теперь пока не становитесь все раздражительными. Это только для очень конкретной ситуации. Поэтому вместо того, чтобы спрашивать, почему я НИКОГДА захочу отправить строковый SQL-код через EF, давайте просто попробуем остановиться на теме «как».

Нужно ли делать это старомодным маршрутом с использованием обычного старого ADO.NET или EF предоставляет мне способ выполнить прямой SQL-запрос выбора / запроса?

Заранее спасибо.

Ответы [ 2 ]

3 голосов
/ 09 февраля 2011

Вы исследовали сущность 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);
}

Поскольку в Entity SQL в настоящее время отсутствуют какие-либо DML конструкции, это невозможно вставить, обновить или удалить проблему Команды, использующие Entity SQL и Object Услуги

1 голос
/ 06 сентября 2012

В качестве альтернативы 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; }
}
...