Question

J'utilise DBLinq et DBMetal.exe pour générer LINQ to SQL comme les classes hors d'une base de données SQLite. Chaque fois que je l'utilise DBMetal pour régénérer mes DataContext, il génère une classe pour sqlite_sequence. Le problème est que sqlite_sequence n'est pas une bonne table, de sorte que la classe n'est pas complète.

La question est, peut DBMetal.exe faire un meilleur travail de générer cette classe, ou puis-je dire DBMetal d'ignorer cette classe?

Merci!

Voici mon appel DBMetal.exe

.\DbMetal.exe /namespace:Namespace /provider:SQLite "/conn:Data Source=Datasource.db" /code:CodeFile.cs 

Voici le SQL généré réel pour sqlite_sequence (qui est une table système):

CREATE TABLE sqlite_sequence(name,seq)

Voici la classe cassée qui obtient généré (notez les propriétés, le nom et suivants, qui n'ont pas les types de données est le problème.):

[Table(Name = "main.sqlite_sequence")]
public partial class SQLiteSequence : INotifyPropertyChanged
{
    public event PropertyChangedEventHandler PropertyChanged;
    protected virtual void OnPropertyChanged(string propertyName)
    {
        if (PropertyChanged != null)
        {
            PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
        }
    }

    private  _name;
    [DebuggerNonUserCode]
    [Column(Storage = "_name", Name = "name", DbType = "")]
    public  Name
    {
        get
        {
            return _name;
        }
        set
        {
            if (value != _name)
            {
                _name = value;
                OnPropertyChanged("Name");
            }
        }
    }       

    private  _seq;
    [DebuggerNonUserCode]
    [Column(Storage = "_seq", Name = "seq", DbType = "")]
    public  SEQ
    {
        get
        {
            return _seq;
        }
        set
        {
            if (value != _seq)
            {
                _seq = value;
                OnPropertyChanged("SEQ");
            }
        }
    }

    public SQLiteSequence() {}
}
Était-ce utile?

La solution

Je me suis trouvé un moyen. Ce fut un processus en plusieurs étapes, mais il y a une méthode pour faire exactement ce que je voulais.

D'abord, je généré un dbml de ma base de données, en utilisant cette commande:

.\DbMetal.exe /namespace:Namespace /provider:SQLite "/conn:Data Source=Datasource.db" /dbml:CodeFile.dbml

Alors je l'dbml effectuée manuellement (qui est juste un fichier XML, bien sûr) et enlevé le nœud pour sqlite_sequence.

Enfin, je généré les dbml.cs avec cette commande:

.\DbMetal.exe /namespace:Namespace /provider:SQLite "/conn:Data Source=Datasource.db" /dbml CodeFile.dbml /code:CodeFile.dbml.cs

Si je veux ajouter une table, ou de nouvelles colonnes, je vais devoir remettre éditer le fichier dbml, mais maintenant j'ai le contrôle que je veux sur mon SQLite DataContext!

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top