sqlite - SqlMetal 无法从 Sqlite 数据库创建 DBML

标签 sqlite mono dblinq

我正在尝试使用新的 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?

最佳答案

你相信我以前没有尝试过生成 DBML 文件吗?

简短版本:这是您遇到的错误,没有解决方法。我已将其归档为 http://code.google.com/p/dblinq2007/issues/detail?id=171 .

更长的版本:似乎没有一个简单的解决方案(除了“jettison System.Xml.Serialization”),因为引用的 DbLinq.Schema.Dbml.Database 类型可以出于显而易见的原因,不能从 System.Data.Linq.dll 公开。由于不同的错误,在 Linux 下构建 DbLinq 并使用 DbMetal.exe 的“解决方法”不起作用。

抱歉给您带来不便。

关于sqlite - SqlMetal 无法从 Sqlite 数据库创建 DBML,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1914899/

相关文章:

visual-studio-2010 - Visual Studio 2010 数据源选项中缺少 SQLite 数据库文件类型

c# - 使用 Mono P/Invoke : Why? 的 DllNotFoundException

c# - 在类型 Nullable<Int32> 和 Int32 之间未定义 Equal

c# - Linq-Sql Oracle对象关系数据类型,有可能吗?

sql - 在 SQLite 中选择与条件匹配的最新行

python - 我有一个使用 HTML、CSS 和 Javascript 构建的静态网站。如何将其与通过 Python API 访问的 SQLite3 数据库集成?

ruby - 将元素从 Ruby 哈希插入到 SQLite 3 的最快方法

ios - Monotouch uialertview 大小问题

c# - Mono编译器(dmcs)如何引用DLL?

c# - 通过 DbLinq 使用 Linq to SQLite 创建记录