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);

この仕様については相当迷ったんですが、後者のほうがわかりやすいと判断しました。