DBMetal Erzeugen eine ungültige Klasse für sqlite_sequence
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() {}
}
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!