dbmetal sqlite_sequence에 대한 유효하지 않은 클래스를 생성합니다
문제
DBLINQ 및 DBMETAL.EXE를 사용하여 SQLITE 데이터베이스에서 클래스와 같은 LINQ-to-SQL을 생성합니다. dbmetal을 사용하여 Datacontext를 재생할 때마다 sqlite_sequence에 대한 클래스를 생성합니다. 문제는 sqlite_sequence가 적절한 테이블이 아니기 때문에 클래스가 완료되지 않는다는 것입니다.
문제는 dbmetal.exe 가이 클래스를 생성하는 더 나은 일을 할 수 있습니까, 아니면 dbmetal에게 해당 클래스를 무시하도록 지시 할 수 있습니까?
감사!
다음은 내 dbmetal.exe 호출입니다
.\DbMetal.exe /namespace:Namespace /provider:SQLite "/conn:Data Source=Datasource.db" /code:CodeFile.cs
다음은 SQLite_Sequence 용 실제 생성 SQL (시스템 테이블)은 다음과 같습니다.
CREATE TABLE sqlite_sequence(name,seq)
다음은 생성되는 깨진 클래스입니다 (데이터 유형이없는 속성, 이름 및 seq에 주목하십시오. 이것이 문제입니다) :
[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() {}
}
해결책
나는 방법을 알아 냈다. 다단계 프로세스 였지만 내가 원하는 것을 정확하게 수행하는 방법이 있습니다.
먼저이 명령을 사용하여 데이터베이스에서 DBML을 생성했습니다.
.\DbMetal.exe /namespace:Namespace /provider:SQLite "/conn:Data Source=Datasource.db" /dbml:CodeFile.dbml
그런 다음 DBML (물론 XML 파일)을 수작업으로 편집하고 SQLITE_SEVERENCE의 노드를 제거했습니다.
마지막 으로이 명령으로 DBML.CS를 생성했습니다.
.\DbMetal.exe /namespace:Namespace /provider:SQLite "/conn:Data Source=Datasource.db" /dbml CodeFile.dbml /code:CodeFile.dbml.cs
테이블 또는 새 열을 추가하려면 DBML 파일을 직접 편집해야하지만 이제 SQLITE Datacontext를 통해 원하는 컨트롤이 있습니다!
제휴하지 않습니다 StackOverflow