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() {}
}
¿Fue útil?

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!

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top