3 votes

Table des noms dans SQLite-net

Je construis une application Windows 8 C#/XAML qui utilise SQLite comme base de données de stockage, et j'essaie de créer plusieurs tables en utilisant la syntaxe SQLite-net.

D'après les recherches que j'ai effectuées jusqu'à présent, un tableau est créé à partir d'une classe. Tout d'abord, j'ai créé une classe "Compte" via :

public class Account
{
    [PrimaryKey, AutoIncrement]
    public int ID { get; set; }

    public string Name { get; set; }
    public string Type { get; set;}
}

Et ensuite créer un tableau et entrer les données initiales plus tard dans le code via :

    private static readonly string _dbPath =
        Path.Combine(Windows.Storage.ApplicationData.Current.LocalFolder.Path, "data.sqlite");

        using (var db = new SQLite.SQLiteConnection(_dbPath))
        {
            db.CreateTable<Account>();

            db.RunInTransaction(() =>

               db.Insert(new Account()
                    {
                        Name = "MyCheckingAccount",
                        Type = "Checking",
                    })
                    );
        }

Je veux créer des tables de comptes multiples, mais le système de gestion des comptes de l'entreprise ne fonctionne pas. db.CreateTable<Account>() crée simplement un tableau et les données sont insérées dans les colonnes à l'aide de la syntaxe suivante db.Insert(). Je ne vois pas où entrer le nom de la table elle-même.

Comment créer plusieurs tables, c'est-à-dire une table nommée "BusinessAccounts" et une autre "PersonalAccounts" basées sur la classe Account ?

Y a-t-il un moyen de faire cela avec SQLite-net ? Ou dois-je écrire la commande SQLite de manière explicite ?

8voto

Stefano Baraldi Points 73

Cette réponse semble être dépassée, dans SQLite-net vous pouvez maintenant utiliser un attribut sur une classe pour remplacer le nom de la table, par exemple :

[SQLite.Table("table_customers")]
public class Customer
    {
        [MaxLength(3)]
        public string code { get; set; }

        [MaxLength(255)]            
        public string name { get; set; }
    }

Il va donc créer/mettre à jour cette table.

4voto

chue x Points 11202

Sqlite-Net utilise le nom de la classe pour créer la table, ainsi que pour mettre à jour les données. Pour faire ce que vous voulez, vous devrez créer des classes distinctes. Une façon de contourner la répétition de champs communs est d'utiliser l'héritage :

public class Account
{
    [PrimaryKey, AutoIncrement]
    public int ID { get; set; }

    public string Name { get; set; }
    public string Type { get; set;}
}

public class BusinessAccounts : Account { }

public class PersonalAccounts : Account { }

Pour créer des tables :

db.CreateTable<BusinessAccounts>();
db.CreateTable<PersonalAccounts>();

Pour insérer des données :

db.Insert(new BusinessAccounts() {...});
db.Insert(new PersonalAccounts() {...});

Il est à noter que le code ci-dessus n'a pas été testé. Vous devez vous assurer que les tables sont créées correctement (par exemple, avec la clé primaire et le champ d'auto-incrément appropriés).

1voto

Nepaluz Points 93

Juste pour ajouter qu'avec SQLite-net, vous pouvez changer l'attribut de la classe en implémentant une surcharge d'initialisation et en définissant l'attribut SQLite.TableAttribute comme ceci :

[Table("Account")]
public class Account
{
    [PrimaryKey]
    [AutoIncrement]
    public int ID { get; set; }
    public string Name { get; set; }
    public string Type { get; set; }

    public Account(string name = null)
    {
        if (!string.IsNullOrEmpty(name))
        {
            TableAttribute attrname = TypeDescriptor.GetAttributes(this)(0);
            attrname.Name = name;
        }
    }
}

Le nom par défaut est account, mais si vous initialisez la classe avec une chaîne de caractères, elle définit l'attribut et vous pouvez alors créer une table avec ce nom.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X