Хранимая процедура из кода c# в EF(Code First)?

297
20 сентября 2017, 09:15

Есть контекст данных и инициализатор данных,

public class ShoopProductContext: DbContext
{
    public DbSet<Client> Clients { get; set; }
    public DbSet<OrderLine> OrderLines { get; set; }
    public DbSet<Order> Orders { get; set; }
    public DbSet<Product> Products { get; set; }
}
public class shoopProductsInitializer : DropCreateDatabaseAlways<ShoopProductContext>
{
    protected override void Seed(ShoopProductContext context)
    {
        context.Products.Add(new Product { NameProduct = "11" });//Тут должна быть ХП
        context.SaveChanges();// 
    }
}

нужно заполнить таблицу данными через ХП, в инициализаторе данных. У меня вопросы:

  1. Как создать ХП в коде с# в EF(Code first)?
  2. Можно ли добавить ХП, в бд при подходе Code first в инициализаторе данных?
  3. Как её(ХП) запустить из кода(C#)?
  4. Можно ли в этой ХП создать триггер и привязать его к таблице?
Answer 1

Для этого в CodeFirst есть возможность создавать прямые запросы к БД через передачу SQL кода. Для этого можно использовать context.Database.ExecuteSqlCommand(string sql, Object[] param). Вызов хранимой процедуры происходит так же.

Если надо вернуть данные, то вызов происходит через метод context.Database.SqlQuery(), который так же имеют объекты DbSet. Но при этом надо знать возвращаемый тип на который будет мапиться ответ.

context.Database.ExecuteSqlCommand(@"
create or replace function TestFunction()
returns setof ""Test"" as 
$$
begin
   return query select ...
end;
$$ language plpgsql
");
context.SaveChanges();

И вызов без привязки к данным.

context.Database.ExecuteSqlCommand("select TestFunction()", null);

Или вызов с привязкой к данным.

context.Test.SqlQuery("select * from TestFunction()").First();
READ ALSO
c# oracle procedure

c# oracle procedure

Я пытаюсь получит данные из этого функции но получаю ошибку

265
Как прочитать ответ от сервера

Как прочитать ответ от сервера

Отправляю запрос на API сайта, подобного вида :

239
Не отображается гугл карта

Не отображается гугл карта

Для вставки на сайт карт использую следующий кодПри загрузке страницы в блоке с id map серое поле и карта появляется при резайзе страницы

229
ошибка публикации записи с телефона

ошибка публикации записи с телефона

В iframe-приложении вк вызываю метод:

187