DBMetal gerando uma classe inválido para sqlite_sequence
Pergunta
Eu estou usando DbLinq e DBMetal.exe para gerar Linq-to-SQL como classes fora um banco de dados SQLite. Toda vez que eu uso DBMetal para regenerar meus DataContext, ele gera uma classe para sqlite_sequence. O problema é que é sqlite_sequence não é uma mesa adequada, de modo que a classe não está completa.
A questão é, DBMetal.exe pode fazer um trabalho melhor de gerar esta classe, ou eu posso dizer DBMetal ignorar essa classe?
Obrigado!
Aqui está minha chamada DBMetal.exe
.\DbMetal.exe /namespace:Namespace /provider:SQLite "/conn:Data Source=Datasource.db" /code:CodeFile.cs
Aqui está o SQL gerado real para sqlite_sequence (que é uma tabela de sistema):
CREATE TABLE sqlite_sequence(name,seq)
Aqui está a classe quebrado que é gerada (aviso de propriedades, nome e seguintes, que não têm tipos de dados que é o 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() {}
}
Solução
Eu descobri uma maneira. Foi um processo multi-passo, mas não há um método para fazer exatamente o que eu queria.
Primeiro, eu gerado um dbml do meu banco de dados, usando este comando:
.\DbMetal.exe /namespace:Namespace /provider:SQLite "/conn:Data Source=Datasource.db" /dbml:CodeFile.dbml
Então a mão Eu editei a dbml (que é apenas um arquivo XML, é claro) e removido o nó para sqlite_sequence.
Finalmente, gerou os dbml.cs com este comando:
.\DbMetal.exe /namespace:Namespace /provider:SQLite "/conn:Data Source=Datasource.db" /dbml CodeFile.dbml /code:CodeFile.dbml.cs
Se eu quiser adicionar uma tabela, ou novas colunas, vou ter de mão editar o arquivo dbml, mas agora eu tenho o controle Eu quero o meu SQLite DataContext!