1

新しい Mono 2.6 SqlMetal ツールを使用して、単純な Sqlite データベース用の DBML ファイルを作成しようとしています。スキーマは次のように非常に単純です。

CREATE TABLE Tags (
    Id              INTEGER PRIMARY KEY,
    TagName         TEXT,
    Description     TEXT);
CREATE TABLE Trends (
    TagId           INTEGER NOT NULL,
    Timestamp       DATETIME NOT NULL,
    Value           TEXT,
    PRIMARY KEY (tagid, timestamp));

以下を使用して DBML ファイルを作成しようとしています。

sqlmetal.exe /conn:"Data Source=MyDatabase.db" /namespace:MyNamespace /provider:Sqlite /dbml:MyDatabase.dbml

次の出力が得られます。

>>> Reading schema from SQLite database
<<< Writing file 'MyDatabase.dbml'
sqlmetal failed:System.InvalidOperationException: There was an error reflecting type 'DbLinq.Schema.Dbml.Database'. --->
 System.InvalidOperationException: DbLinq.Schema.Dbml.Database is inaccessible due to its protection level. Only public types can be processed
  at System.Xml.Serialization.ReflectionHelper.CheckSerializableType (System.Type type, Boolean allowPrivateConstructors ) [0x00000] in <filename unknown>:0
  at System.Xml.Serialization.XmlReflectionImporter.ImportClassMapping (System.Xml.Serialization.TypeData typeData, System.Xml.Serialization.XmlRootAttribute root, System.String defaultNamespace) [0x00000] in <filename unknown>:0
  at System.Xml.Serialization.XmlReflectionImporter.ImportTypeMapping (System.Xml.Serialization.TypeData typeData, System.Xml.Serialization.XmlRootAttribute root, System.String defaultNamespace) [0x00000] in <filename unknown>:0
  --- End of inner exception stack trace ---
  at System.Xml.Serialization.XmlReflectionImporter.ImportTypeMapping (System.Xml.Serialization.TypeData typeData, System.Xml.Serialization.XmlRootAttribute root, System.String defaultNamespace) [0x00000] in <filename unknown>:0
  at System.Xml.Serialization.XmlReflectionImporter.ImportTypeMapping (System.Type type, System.Xml.Serialization.XmlRootAttribute root, System.String defaultNamespace) [0x00000] in <filename unknown>:0
  at System.Xml.Serialization.XmlSerializer..ctor (System.Type type, System.Xml.Serialization.XmlAttributeOverrides overrides, System.Type[] extraTypes, System.Xml.Serialization.XmlRootAttribute root, System.String defaultNamespace) [0x00000] in <filename unknown>:0  at System.Xml.Serialization.XmlSerializer..ctor (System.Type type) [0x00000] in <filename unknown>:0
  at DbLinq.Schema.Dbml.DbmlSerializer.Write (System.IO.Stream xmlStream, DbLinq.Schema.Dbml.Database dbml) [0x00000] in <filename unknown>:0
  at DbMetal.Generator.Implementation.Processor.WriteSchema (DbLinq.Schema.Dbml.Database dbSchema, ISchemaLoader schemaLoader, DbMetal.Parameters parameters) [0x00000] in <filename unknown>:0
  at DbMetal.Generator.Implementation.Processor.ProcessSchema (DbMetal.Parameters parameters) [0x00000] in <filename unknown>:0

/code オプションを使用して C# コード ファイルを作成できますが、DBML の生成時に常に失敗します。

微妙なコマンドライン オプションが不足していますか、それとも SqlMetal のこの新しいビルドは Sqlite で機能しませんか?

4

1 に答える 1

2

<sheepish-grin>これまでDBMLファイルを生成しようとしたことがないと思いますか?</ sheeepish-grin>

短いバージョン:これはあなたが直面しているバグであり、回避策はありません。http://code.google.com/p/dblinq2007/issues/detail?id=171として提出しました。

長いバージョン:明らかな理由により、参照されるDbLinq.Schema.Dbml.Database型をから公開できないため、これに対する単純な解決策はないようです( "jettison System.Xml.Serialization"を除く) 。System.Data.Linq.dllLinuxでDbLinqをビルドし、DbMetal.exeを使用する「回避策」は、別のバグのために機能しません。

ご不便おかけしてすみません。

于 2009-12-16T20:11:09.327 に答える