DBMetal la generación de una clase no válido para sqlite_sequence
Pregunta
Estoy usando DBLinq y DBMetal.exe para generar LINQ to SQL como las clases de una base de datos SQLite. Cada vez que utilizo DBMetal para regenerar mis DataContext, genera una clase para sqlite_sequence. El problema es que es sqlite_sequence no es una tabla adecuada, por lo que la clase no es completa.
La pregunta es, ¿puede DBMetal.exe hacer un mejor trabajo de generar esta clase, o puedo decir DBMetal hacer caso omiso de esa clase?
Gracias!
Esta es mi llamada DBMetal.exe
.\DbMetal.exe /namespace:Namespace /provider:SQLite "/conn:Data Source=Datasource.db" /code:CodeFile.cs
Aquí está el SQL generado real para sqlite_sequence (que es una tabla del sistema):
CREATE TABLE sqlite_sequence(name,seq)
Esta es la clase rota que se genera (nótese las propiedades, el nombre y siguientes, que no tienen tipos de datos Ese es el problema.):
[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() {}
}
Solución
Me di cuenta de una manera. Fue un proceso de múltiples pasos, pero hay un método para hacer exactamente lo que quería.
En primer lugar, me genera una dbml de mi base de datos, el uso de este comando:
.\DbMetal.exe /namespace:Namespace /provider:SQLite "/conn:Data Source=Datasource.db" /dbml:CodeFile.dbml
Entonces la mano editado el dbml (que es sólo un archivo XML, por supuesto) y se separó el nodo para sqlite_sequence.
Finalmente, genera los dbml.cs con este comando:
.\DbMetal.exe /namespace:Namespace /provider:SQLite "/conn:Data Source=Datasource.db" /dbml CodeFile.dbml /code:CodeFile.dbml.cs
Si quiero agregar una tabla o columnas nuevas, voy a tener a mano editar el archivo dbml, pero ahora tengo el control sobre mi Quiero SQLite DataContext!