Информация об изменениях

Сообщение Re[13]: Архитектура доступа к бд от 17.04.2019 18:39

Изменено 17.04.2019 18:39 okon

Re[13]: Архитектура доступа к бд
D>Что-то типа (можно и поприятней подход придумать):
D>
D>using (var db = new DataConnection())
D>{
D>   db.StatementHints.Add(@"/*+ LEADING(e2 e1) USE_NL(e1) INDEX(e1 emp_emp_id_pk) 
D>           USE_MERGE(j) FULL(j) */");

D>   var query = from e1 in db.GetTable<Employee>()
D>               from e2 in db.GetTable<Employee>().InnerJoin(e2 => e2.ManagerId == e1.EmployeeId)
D>               from j  in db.GetTable<JobHitory>().InnerJoin(j => j.EmployeeId == e1.EmployeeId && j.StartDate == e1.HireDate)
D>               group new {e1, e2} by new { e1.FirstName, e1.LastName, j.JobId } into g
D>               select new 
D>               {
D>                  g.Key.FirstName,    
D>                  g.Key.LastName,    
D>                  g.Key.JobId,
D>                  TotalSal = g.Sum(e => e.e2.Salary)
D>               };
D>    query = query.OrderBy(e => e. TotalSal);
D>    var result = query.ToList();
D>}
D>


Но в этом случае ты как раз теряешь то с чего начиналась тема , что эта прослойка заменяет абстракцию IRepository.
Тут ты указал специфику Оракла и этот же код нельзя будет также использовать на MSSQL.
Т.е. потребуется как минимум 2 реализации : с хинтами для оракла, с хинтами для mssql, а в реальной жизни скорее всего не только хинты но и сами запросы немного будут разные для разных СУБД
если придется оптимизировать.


Второй момент — особенности в SQL Oracle, например использование Sequence, как написать например
select schema.sequence.NEXTVAL from dual;
Re[13]: Архитектура доступа к бд
D>Что-то типа (можно и поприятней подход придумать):
D>
D>using (var db = new DataConnection())
D>{
D>   db.StatementHints.Add(@"/*+ LEADING(e2 e1) USE_NL(e1) INDEX(e1 emp_emp_id_pk) 
D>           USE_MERGE(j) FULL(j) */");
D>}
D>


Но в этом случае ты как раз теряешь то с чего начиналась тема , что эта прослойка заменяет абстракцию IRepository.
Тут ты указал специфику Оракла и этот же код нельзя будет также использовать на MSSQL.
Т.е. потребуется как минимум 2 реализации : с хинтами для оракла, с хинтами для mssql, а в реальной жизни скорее всего не только хинты но и сами запросы немного будут разные для разных СУБД
если придется оптимизировать.


Второй момент — особенности в SQL Oracle, например использование Sequence, как написать например
select schema.sequence.NEXTVAL from dual;