0

次の 2 つのオブジェクトがあるとします。

public class Employee : Person
{
    public string Something { get; set; }
}

public class Person
{
    public int Id { get; set; }
    public string FirstName { get; set; }
    public string LastName { get; set; }
}

次に、次のような特定のデータベース スキーマを処理する必要があります。

CREATE TABLE employee (
    id INTEGER PRIMARY KEY,
    something TEXT
);

CREATE TABLE person (
    id INTEGER PRIMARY KEY,
    firstname TEXT,
    lastname TEXT
);

(どちらも同じ ID を共有しているため、クエリで 1 つのレコードに結合できます。)

質問: SQLite-Net 拡張機能を使用した sqlite-net でこれを解決する機会はありますか? もしそうなら、それはどのように機能しますか?

4

1 に答える 1

1

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または同等のものを使用して、マッピング コードをより読みやすく、保守しやすくすることができます。

于 2015-04-08T11:13:24.697 に答える