SQLite.Net マッピングはオブジェクト階層を 1 つのテーブルにフラット化するため、SQLite.Net にテーブルを作成させると、これらの完全に無関係なテーブルが取得されます。
CREATE TABLE employee (
id INTEGER PRIMARY KEY,
firstname TEXT,
lastname TEXT,
something TEXT
);
CREATE TABLE person (
id INTEGER PRIMARY KEY,
firstname TEXT,
lastname TEXT
);
後者への変更は前者には影響せず、その逆も同様です。読み取りと書き込みにカスタム クエリを使用できますが、そのスキーマとクラスで SQLite.Net のユーティリティ メソッドを使用することはできません。
必要に応じて、データベース操作で使用される中間クラスを追加し、それらをモデル クラスにマップすることができます。このようなもの:
[Table("employee")]
public class DBEmployee
{
[PrimaryKey]
public int Id { get; set; }
public string Something { get; set; }
}
[Table("person")]
public class DBPerson
{
[AutoIncrement, PrimaryKey]
public int Id { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
}
public class DBService {
static SQLiteConnection _connection;
public void SaveEmployee(Employee employee) {
var dbPerson = new DBPerson {
FirstName = employee.FirstName,
LastName = employee.LastName
};
_connection.Insert(dbPerson);
var dbEmployee = new DBEmployee {
Id = dbPerson.Id,
Something = employee.Something
};
_connection.Insert(dbEmployee);
}
public Employee GetEmployee(int employeeId) {
var dbEmployee = _connection.Get<DBEmployee>(employeeId);
var dbPerson = _connection.Get<DBPerson>(employeeId);
return new Employee {
Id = employeeId,
Something = dbEmployee.Something,
FirstName = dbPerson.FirstName,
LastName = dbPerson.LastName
};
}
}
AutoMapperまたは同等のものを使用して、マッピング コードをより読みやすく、保守しやすくすることができます。