2009-12-16 7 views
1

J'essaie d'utiliser le nouvel outil Mono 2.6 SqlMetal pour créer le fichier DBML pour une base de données Sqlite simple. Le schéma est très simple comme suit:SqlMetal ne parvient pas à créer DBML à partir de la base de données 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)); 

Je suis en train de créer le fichier DBML en utilisant les éléments suivants:

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

Je reçois la sortie suivante:

>>> 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 

je peux utiliser l'option/code pour créer un fichier de code C#, mais elle échoue toujours lors de la génération d'un DBML.

Est-ce qu'il me manque une option de ligne de commande subtile ou est-ce que cette nouvelle version de SqlMetal ne fonctionne pas pour Sqlite?

Répondre

2

< sheepish-grin > Croiriez-vous que je n'ai pas essayé de générer un fichier DBML auparavant? </sheepish-grin >

Version courte: c'est un bug que vous rencontrez, sans solution de contournement. Je l'ai classé comme http://code.google.com/p/dblinq2007/issues/detail?id=171.

Version plus longue: Il ne semble pas y avoir de solution simple (mis à part "jettison System.Xml.Serialization"), car le type référencé DbLinq.Schema.Dbml.Database ne peut pas être public de System.Data.Linq.dll, pour des raisons évidentes. Une "solution de contournement" de la construction de DbLinq sous Linux et de l'utilisation de DbMetal.exe ne fonctionne pas, en raison d'un bogue différent.

Désolé pour le dérangement.

Questions connexes