1メソッド1SQLの原則
Soma 0.0.2.0では、Repositoryのメソッドを呼び出した場合に複数のSQLが自動で実行される場合があります。たとえば、DepartmentにEmployeeを関連付けてDepartmentをINSERTする場合が当てはまります。
var departmentRepository = new DepartmentRepository(); var department = new Department { DepartmentId = 10, DepartmentName = "hoge"}; department.Employee.Add(new Employee { EmployeeId = 10, EmployeeName = "hoge", Department = department }); departmentRepository.Insert(department);
RepositoryのInsertメソッドを呼ぶと次の2つのSQLが発行されます。
insert [dbo].[Department]([DepartmentId], [DepartmentName]) values (10, 'hoge') insert [dbo].[Employee]([EmployeeId], [EmployeeName], [DepartmentId]) values (10, 'hoge', 10)
次のバージョンでは、この挙動はやめては原則としてRepositoryの1つのメソッドについては1つのSQLしか実行されないようにしたいと思います。つまり、DeparmtmentとEmployeeをINSERTしたいなら次のようにそれぞれのRepositoryのInsertメソッドを呼び出してもらいます。
var departmentRepository = new DepartmentRepository(); var department = new Department { DepartmentId = 10, DepartmentName = "hoge"}; departmentRepository.Insert(department); var employeeRepository = new EmployeeRepository(); var employee = new Employee {EmployeeId = 10, EmployeeName = "hoge", Department = department}; employeeRepository.Insert(employee);
この仕様については相当迷ったんですが、後者のほうがわかりやすいと判断しました。