Csharp/C#教程:在可移植类库中使用SQLite分享


在可移植类库中使用SQLite

最近我们开始研究一个新项目,其中包括Windows 8 Metro,Windows Phone和桌面应用程序的客户端。 决定使用MVVM模式作为主要架构,因为在项目之间共享ViewModel对我们来说是更可接受的解决方案。

我们决定为此目的使用可移植类库,但问题是在我们尝试添加对适当库的引用后,从Visualstudio 2012扩展库下载并安装SQLite for Windows运行时,我们根本看不到这些库。 这让我们想到,在Portable类库项目中不可能使用SQLite。

也许你已经完成了一些并知道我们实现这种function的方式? 请提供正确的方法来开发此任务,因为使用SQLite并且在开发的这个阶段具有可重用的代码非常重要

在MvvmCross,我们通过不同的方法解决了这个问题。

我们希望利用SQLite的本地端口,我们希望使用来自https://github.com/praeclarum/sqlite-net/的SQLite-net ORM包装器。

因此,我们所做的不是仅仅使用PCL,而是:

  • 使用通用的DI模式和库,以便PCL和非PCL数据库客户端都知道如何加载和实例化这些插件。


  • 在代码级别,客户端应用程序可以使用以下插件:

    在业务逻辑库(PCL或特定于平台)中,代码可以定义模型对象:

    public class ListItem { [PrimaryKey, AutoIncrement] public int Id { get; set; } public string Name { get; set; } public string WhenCreated { get; set; } } 

    在启动期间,应用可以调用:

      Cirrious.MvvmCross.Plugins.Sqlite.PluginLoader.Instance.EnsureLoaded(); var factory = this.GetService(); var connection = factory.Create("SimpleList"); connection.CreateTable(); 

    然后在操作期间,代码可以执行以下操作:

      connection.Insert(new ListItem() { Name = TextToAdd, WhenCreated = DateTime.Now.ToString("HH:mm:ss ddd MMM yyyy") }); 

    要么

      public ListItem this[int index] { get { return _connection.Table().OrderBy(_sortOrder).Skip(index).FirstOrDefault(); } } 

    虽然UI特定代码必须引用插件的特定于平台的扩展,并将该平台特定的实现注入IoC / DI系统。 在Droid上这真的很简单(因为MonoDroid在运行时支持Assembly.Load),但在其他平台上,这涉及一些“锅炉板”代码,如:

      protected override void AddPluginsLoaders(Cirrious.MvvmCross.Platform.MvxLoaderPluginRegistry loaders) { loaders.AddConventionalPlugin(); base.AddPluginsLoaders(loaders); } 

    笔记:

    Stuart对如何使用SQLite创建PCL进行了很好的解释,但今天我发现了这种方法,我希望它可以更好地解决任何其他问题

    SQLite的新开源可移植类库

    可能值得一提的是AutoIncrement和PrimaryKey属性来自以下命名空间

    使用Cirrious.MvvmCross.Plugins.Sqlite;

      public class Reference : IBusinessEntity { public string Key { get; set; } public string Value { get; set; } [PrimaryKey, AutoIncrement] public long Id { get; set; } } 

    经过几周的狩猎,我终于想到你必须连接使用:

     var factory = new MvxWpfSqLiteConnectionFactory(); 

    我安装了

     using Cirrious.MvvmCross.Community.Plugins.Sqlite; using Cirrious.MvvmCross.Community.Plugins.Sqlite.Wpf; using Cirrious.CrossCore; 

    对于那里的所有MVVMcross天才和所有Sqlite天才,这可能是显而易见的。

    没有人在任何地方提到这一点,并且MVVMcross的示例都不会编译或使用Sqlite.NET,它实际上在进行连接时不是MVVM兼容PCL兼容的。

    哦,这适用于Winforms,PCL等(我甚至不使用Wpf)。

    上述就是C#学习教程:在可移植类库中使用SQLite分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!

    本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

    ctvol管理联系方式QQ:251552304

    本文章地址:https://www.ctvol.com/cdevelopment/987029.html

    (0)
    上一篇 2021年12月22日
    下一篇 2021年12月22日

    精彩推荐