这个问题最初始于沉的博客:
http://www.shenchauhan.com/blog/2015/11/25/sqlite-and-uwp
我创建了一个UWP应用程序来处理SQLite,因此添加了以下对项目的引用
1)使用sqlite.org/download.html中的Visual Studio 2015进行Universal App Platform开发的SQLite VSIX包
2)Visual C ++ 2015 Runtime for Universal Windows 14:0以避免因步骤1而导致的VS警告
并选择了包装器(原始sqlite.net包装器的fork)
3)SQLite.Net.PCL(https://github.com/oysteinkrog/SQLite.Net-PCL/tree/master/src/SQLite.Net 3.1.1版
所有代码都在MainPage.xaml.cs上,一个有效,另一个没有。
作品
using SQLite.Net;
using System.Diagnostics;
using System.IO;
using System.Linq;
using Windows.UI.Xaml.Controls;
namespace SQLite_v3
{
public sealed partial class MainPage : Page
{
private string path;
public MainPage()
{
this.InitializeComponent();
this.path = Path.Combine(Windows.Storage.ApplicationData.Current.LocalFolder.Path, "db.sqlite");
//Create Table and Insert item
using (var db = new SQLiteConnection(new SQLite.Net.Platform.WinRT.SQLitePlatformWinRT(), path))
{
db.CreateTable<A>();
db.Insert(new A() { Symbol="Hello"}); //Will be changed below
};
//Query and output
using (var db = new SQLiteConnection(new SQLite.Net.Platform.WinRT.SQLitePlatformWinRT(), path))
{
foreach (var item in db.Table<A>().Select(v => v))
Debug.WriteLine("A: " + item.Symbol);
};
}
}
public class A
{
public int Id { get; set; }
public string Symbol { get; set; }
}
}
不起作用(即使在运行新代码之前手动删除打包文件夹/ LocalState中的数据库)
在这种情况下,我天真地改变了A类,以包含一个带有参数的构造函数,以便将来包含在更大的程序中。这是我得到错误的地方。以下非工作代码与
中的前一代码不同- A类中的演员
-Insert方法现在调用新的A ctor
using SQLite.Net;
using System.Diagnostics;
using System.IO;
using System.Linq;
using Windows.UI.Xaml.Controls;
namespace SQLite_v3
{
public sealed partial class MainPage : Page
{
private string path;
public MainPage()
{
this.InitializeComponent();
this.path = Path.Combine(Windows.Storage.ApplicationData.Current.LocalFolder.Path, "db.sqlite");
//Create Table and Insert item
using (var db = new SQLiteConnection(new SQLite.Net.Platform.WinRT.SQLitePlatformWinRT(), path))
{
db.CreateTable<A>();
db.Insert(new A("Hello")); //Changed with respect to the working scenario
};
//Query and output
using (var db = new SQLiteConnection(new SQLite.Net.Platform.WinRT.SQLitePlatformWinRT(), path))
{
foreach (var item in db.Table<A>().Select(v => v))
Debug.WriteLine("A: " + item.Symbol);
};
}
}
public class A
{
public int Id { get; set; }
public string Symbol { get; set; }
public A(string symbol) //Change with respect to the working scenario
{
Symbol = symbol;
}
}
}
异常
代码构建没有抱怨,但是当我运行它时,我在foreach循环中得到一个异常:
mscorlib.ni.dll中发生了'System.MissingMethodException'类型的异常但未在用户代码中处理
其他信息:找不到“SQLite_v3.A”类型的构造函数。
解决方案
我发现的唯一解决方案是除了参数化之外,在A类中添加默认ctor,但我想避免这种情况, 首先,我不明白为什么我失去了这种可能性。
问题
- 可以避免A类定义中的默认ctor;如果不是为什么?
- 任何关于为什么会这样的想法?
非常感谢你的帮助。