Задать вопрос

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

Есть контекст данных и инициализатор данных,
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. Можно ли в этой ХП создать триггер и привязать его к таблице?
  • Вопрос задан
  • 1271 просмотр
Подписаться 5 Оценить Комментировать
Пригласить эксперта
Ответы на вопрос 2
Stored Procedure in Entity Framework
Хранимые процедуры

Хранимку можно создать миграцией, и она 100% будет на каждой БД.
В хранимке думаю можно сделать все, главное вернуть нормальный объект.
Ответ написан
Комментировать
Maxmyd
@Maxmyd
1 и 2 - в миграции прописать
protected override void Up(MigrationBuilder migrationBuilder)
{
  migrationBuilder.Sql(@"CREATE PROC dbo.Execute ...");
}
protected override void Down(MigrationBuilder migrationBuilder)
{
  migrationBuilder.Sql(@"DROP PROC dbo.Execute");
}

3. В своем контексте прописать и вызывать
public class MyDbContext: DbContext
{
public IEnumerable<TEntity> ExecuteSql<TEntity>(string query, dynamic parameters = null, CommandType commandType = CommandType.Text)
        {
            using (SqlConnection connection = new SqlConnection(Database.GetDbConnection().ConnectionString))
            {
                connection.Open();
                return connection.Query<TEntity>(query, (object)parameters, commandType: commandType);
            }
        }
}

4. Можно, это же тоже T-SQL
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы