2009-12-16 3 views
1

Я пытаюсь использовать новый инструмент Mono 2.6 SqlMetal для создания файла DBML для простой базы данных Sqlite. Схема очень проста следующим образом:SqlMetal не создает DBML из базы данных Sqlite

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?

ответ

2

< sheepish-grin > Вы считаете, что я не пытался генерировать DBML-файл раньше? </sheepish-grin >

Краткая версия: это ошибка, с которой вы сталкиваетесь, без обходного пути. Я подал его как http://code.google.com/p/dblinq2007/issues/detail?id=171.

Longer версия: Там, кажется, не быть простым решением этой проблемы (кроме «отстрелить System.Xml.Serialization»), так как ссылки DbLinq.Schema.Dbml.Database типа не может быть открыто от System.Data.Linq.dll, по ~ понятных причины. «Обходной путь» построения DbLinq под Linux и использование DbMetal.exe не работает из-за другой ошибки.

Извините за неудобства.