EF core wywoływanie StoredProcedures

0

Cześć,
Mam dwa pytania odnośnie EF core i stored procedure

  1. Do czego służy migration? przygotuje sobie jakąś procedurę w DB więc powinienem zrobić migracje Add-Migration, czy to jest tylko po to żeby mi zapewnić że dana procedura po uruchomieniu aplikacji zostanie dodana do DB?
  2. Jak już chcę odpalić procedurę, znalazłem taki przykład jak na screenie:
    screenshot-20201215123213.png
    Procedura zawiera w sobie tylko select * from employe where id = @Id
    Dlaczego i w ogóle po co FromSqlRaw jest wywoływane na DBSet<Employe> ? nie potrafię tego zrozumieć co dana procedura ma wspólnego z tym DBSet, co w przypadku jakbym chciał wywołać procedure które mi zwróci kilka danych z kilku różnych tabel? To już wtedy nijak będzie się miało do context.Employees :/
0

EF Core nie ma opcji pobierania danych z czystego zapytania. Musisz mieć obiekt/tabele. Skorzystaj z Dappera.

PS.
Kolokwialnie mówiąc zje*ali to EF Core i nie mają zamiaru zmienić.

1

Migracje służą temu, żeby zsynchronizować to co masz fizycznie w bazie danych (tabele, widoki, procedury) z tym co masz w modelu opisanym w kodzie. Jak coś zmienisz to potem możesz zrobić migrację i ci zaktualizuje bazę do tego co masz w modelu C#.

0

Może komuś się przyda ogarnąłem w ten sposób:

public async Task<List<T>> ExecuteSqlCommandAsync<T>(string sql, Func<DbDataReader, T> map)
        {
            List<T> resultList = new List<T>();
            using (DbCommand command = this.Database.GetDbConnection().CreateCommand())
            {
                command.CommandText = sql;
                command.CommandType = System.Data.CommandType.Text;

                await this.Database.OpenConnectionAsync();
                using (DbDataReader result = await command.ExecuteReaderAsync())
                {
                    if (result.HasRows)
                    {
                        while (await result.ReadAsync())
                        {
                            resultList.Add(map(result));
                        }

                        return resultList;
                    }
                }
            }
            return null;
        }

Przykład użycia:

string sql = $"select f_testfunction('Args1', 'Args2')";
List<int> result = await ExecuteSqlCommandAsync<int>(sql, x => (int)x[0]);

1 użytkowników online, w tym zalogowanych: 0, gości: 1