Frage

Ich bin mit DbLinq und DBMetal.exe Linq-to-SQL wie Klassen aus einer SQLite-Datenbank zu generieren. Jedes Mal, wenn ich DBMetal verwenden, um meine Datacontext zu regenerieren, erzeugt er eine Klasse für sqlite_sequence. Das Problem ist, dass sqlite_sequence ist kein richtiger Tisch, so dass die Klasse nicht abgeschlossen ist.

Die Frage ist, kann DBMetal.exe machen einen besseren Job, diese Klasse zu erzeugen, oder kann ich DBMetal sagen diese Klasse zu ignorieren?

Danke!

Hier ist mein DBMetal.exe Anruf

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

Hier ist der tatsächlich erzeugten SQL für sqlite_sequence (das ist eine Systemtabelle):

CREATE TABLE sqlite_sequence(name,seq)

Hier ist die gebrochene Klasse, die erzeugt wird (man beachte die Eigenschaften, Name und f, die nicht über Datentypen, die das Problem ist.):

[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() {}
}
War es hilfreich?

Lösung

dachte ich einen Ausweg. Es war ein mehrstufiger Prozess, aber es gibt eine Methode, genau das zu tun, was ich wollte.

Zuerst habe ich erzeugen eine dbml aus meiner Datenbank, mit diesem Befehl:

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

Dann habe ich von Hand bearbeitet die dbml (die nur eine XML-Datei, natürlich) und entfernt den Knoten für sqlite_sequence.

Schließlich erzeugen ich die dbml.cs mit diesem Befehl:

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

Wenn ich eine Tabelle hinzugefügt werden soll, oder neue Spalten, ich werde die dbml Datei, auf der Hand bearbeiten habe, aber jetzt habe ich die Kontrolle Ich möchte über meine SQLite Datacontext!

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top