我已经阅读了一些关于SQLite for Xamarin的帖子,但我仍然无法以正确的方式设置 SQLiteNetExtensions 。我目前正在使用Target Framework Android 7.1(API Level 25 - Nougat)开发一个Android应用程序。
有谁能告诉我我做错了什么?
我安装了nuget包:
Install-Package SQLiteNetExtensions -Version 2.0.0-alpha2 -Pre
Install-Package SQLite.Net-PCL -Version 3.1.1
然后我设置了我的代码。
using SQLite.Net.Attributes;
using SQLiteNetExtensions.Attributes;
using System;
namespace AppName.Resources.Model
{
public class Entry
{
[PrimaryKey, AutoIncrement]
public int Id { get; set; }
[ForeignKey(typeof(Stock))]
public int StockId { get; set; }
public DateTime Date { get; set; }
public double Amount { get; set; }
}
}
using SQLite.Net.Attributes;
using SQLiteNetExtensions.Attributes;
using System;
using System.Collections.Generic;
namespace AppName.Resources.Model
{
public class Stock
{
[PrimaryKey, AutoIncrement]
public int Id { get; set; }
public string Name { get; set; }
public DateTime LastUpdated { get; set; }
[OneToMany(CascadeOperations = CascadeOperation.All)]
public List<Entry> Entrys { get; set; }
}
}
using Android.Util;
using AppName.Resources.Model;
using SQLite.Net;
using SQLite.Net.Platform.XamarinAndroid;
using SQLiteNetExtensions.Extensions;
using System.Collections.Generic;
using System.IO;
namespace AppName.Resources.DataHelper
{
public class DataBase
{
string folder = System.Environment.GetFolderPath(System.Environment.SpecialFolder.Personal);
public bool CreateDataBase()
{
try
{
using (var stocksDBConnection = new SQLiteConnection(new SQLitePlatformAndroid(), Path.Combine(folder, "Stock.db")))
{
stocksDBConnection.CreateTable<Entry>();
stocksDBConnection.CreateTable<Stock>();
return true;
}
}
catch (SQLiteException ex)
{
Log.Info("SQLiteEx", ex.Message);
return false;
}
}
public bool InsertIntoTableStock(object stock)
{
try
{
using (var stocksDBConnection = new SQLiteConnection(new SQLitePlatformAndroid(), Path.Combine(folder, "Stock.db")))
{
stocksDBConnection.InsertWithChildren(stock);
return true;
}
}
catch (SQLiteException ex)
{
Log.Info("SQLiteEx", ex.Message);
return false;
}
}
...
这些参考文献由nuget添加:
SQLite的网
SQLite.Net
SQLite.Net.Platform.XamarinAndroid
SQLiteNetExtensions
SQLitePCLRaw.Batteries_green
SQLitePCLRaw.Core
SQLitePCLRaw.lib.e_sqlite3
SQLitePCLRaw.provider.e_sqlite3
发生错误:
'SQLiteConnection'不包含'InsertWithChildren'的定义,最好的扩展方法重载'WriteOperations.InsertWithChildren(SQLiteConnection,object,bool)'需要一个'SQLiteConnection'类型的接收器
'SQLiteConnection'不包含'GetAllWithChildren'的定义,最好的扩展方法重载'ReadOperations.GetAllWithChildren(SQLiteConnection,Expression&gt;,bool)'需要一个'SQLiteConnection'类型的接收器
那就是我得到了多远。在那里谁知道该怎么办?也许删除冲突的引用?
答案 0 :(得分:0)
经过一番研究后我发现:
var hasContent = ed.selection.getContent({format : 'text'}.length > 0);
if(!hasContent) return;
取决于
SPAN
而不是
Install-Package SQLiteNetExtensions -Version 2.0.0-alpha2 -Pre
但删除所有引用后,清理解决方案并重新安装需要的两个软件包,不再有Install-Package sqlite-net-pcl
可用。
尝试使用Install-Package SQLite.Net-PCL -Version 3.1.1
代替时:
'SQLiteConnection'不包含'InsertWithChildren'的定义,最好的扩展方法重载'WriteOperations.InsertWithChildren(SQLiteConnection,object,bool)'需要一个'SQLiteConnection'类型的接收器
我很好奇是否可以无缝地开发VS-Android-Apps。因为一切都需要数年才能完成。
编辑:
好吧,经过几天的痛苦之后,解决方案就是使用更新的预发布版本(alpha 3 ),这在官方网页上甚至没有引用。目前我很满意。 :)
SQLite.net
希望有人可能需要这个。
答案 1 :(得分:0)
在经过一番搜索之后,我开始知道这个扩展的创建者在开发时使用了一个名为MvvmCross的模式。因此,除非您使用该模式模型,否则您将收到此错误。
对于非MvvmCross用户,他们必须重建源文件并在他们的项目中引用它,而不是使用预编译的,即您正在使用的文件。
转到以下链接的第四篇文章 https://forums.xamarin.com/discussion/20117/sqlite-net-extensions-and-sqliteconnection他在这里讲述了如何以非常简短的方式从他的帖子中重建源头。
希望你能理解它但是如果不等到我安装Visual Studio和Xamarin并自己试一试,那么我可以给你准确的步骤。 到那时需要一段时间,Kudos!
以下是源文件https://bitbucket.org/twincoders/sqlite-net-extensions/downloads/的链接 单击下载存储库
答案 2 :(得分:0)
好的,我确定它只是一个版本问题,因为我只是尝试了你的代码,它对我来说很好。尝试从Visual Studio中的NuGet包管理器窗口安装SQliteNetExtensions v 1.3.0
包,而不是其他任何内容。它将安装所有依赖项。
这就是我所做的 - 尝试做同样的事情,看看这是否有帮助:
Stock
,Entry
和Database
等级并粘贴您的给定的
代码分别。SQliteNetExtensions v 1.3.0
包
它随之安装了以下依赖项,我自己也没有安装它们
SQLite.Net-PCL v3.0.5
NewtonSoft.Json v6.0.8
这是我在安装SQliteNetExtensions v 1.3.0
包之后得到的内容。
正如您可以看到它显示SQLite.Net-PCL v3.0.5
到v3.1.1
的更新时我对已更新的版本感到厌倦但仍然可以正常工作,因此您可以自行更新。
这里有点证明它的工作正常。我还在模拟器上编译并运行了应用程序,它运行良好。
答案 3 :(得分:0)