0

Disons que j'ai ces deux objets:Joindre deux dossiers avec la même clé

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

Maintenant, je dois faire face à un schéma de base de données donnée, qui ressemble suit:

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

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

(deux partager le même identifiant, afin qu'ils puissent être joints ensemble à un seul enregistrement dans une requête.)

Question: Est-ce que j'ai une chance de résoudre ce problème avec sqlite-net avec SQLite-Net Extensions? Et si oui: comment cela fonctionnerait-il?

Répondre

1

cartographie SQLite.Net aplanit la hiérarchie des objets dans une seule table, donc si vous laissez SQLite.Net créer les tables que vous obtiendrez ces tables sans aucun lien avec:

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

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

Les modifications apportées à ce dernier n'affectera pas le précédent et vice versa. Vous pourrez utiliser des requêtes personnalisées pour lire et écrire, mais vous ne pourrez utiliser aucune des méthodes utilitaires de SQLite.Net avec ce schéma et ces classes. En fonction de vos besoins, vous pouvez ajouter des classes intermédiaires qui seront utilisées dans les opérations de base de données, puis les mapper aux classes du modèle. Quelque chose comme ceci:

[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 
     }; 
    } 
} 

Vous pouvez utiliser AutoMapper ou équivalent pour rendre le code de cartographie plus lisible et maintenable.