Xamarin.Forms 可移植无法访问 ADO Open Command

本文关键字:ADO Open Command 访问 Forms 可移植 Xamarin | 更新日期: 2023-09-27 18:30:35

早上好,我的应用程序正在使用 Xamarin.Forms Portable 在 Visual Studio 2015 Enterprise 中构建。

应用程序目标设备是:Windows Universal (10),Ipad,Android。

所以我遇到了我需要数据库的情况,我已经开始使用 ORM Sqlite,但我注意到我必须声明所有查询映射,所以我正在考虑更改为 ADO(Mono.data.sqlite

)。

我已经从 Xamarin 复制了示例代码,并尝试通过 nuget 安装 Mono.Data.SQL,但我无法访问 .Open() 属性,并且无法创建数据库或连接到现有数据库。

然后,我尝试使用Vs2015 + Xamarin.Forms PLC创建一个新的测试项目,并直接在引用中添加Mono.data.sqlite和System.Data,这样我确实可以访问.创建文件, .打开,但我收到此错误:

"对类型'组件'的引用声称它在'系统'中定义,但找不到

错误的图像现在我仍在互联网上寻找,但没有找到任何关于为什么会发生这种情况的好答案。

提前非常感谢

Xamarin.Forms 可移植无法访问 ADO Open Command

首先,Xamarin Forms UWP 处于预览状态,并且在为本机编译时发布时存在已知问题。这一切都将被修复并最终投入生产(希望今年),但只是提高这一点。

其次,我建议使用SQLite PCL。 https://www.nuget.org/packages/SQLite.Net.Async-PCL/

Xamarin有一篇关于它的文章:https://developer.xamarin.com/guides/xamarin-forms/working-with/databases/

是的,你没有得到像实体框架这样的强大ORM(你实际上在UWP上得到(仅限EF7 +,现在在RC1中),但不是Xamarin.iOS或Xamarin.Android)。但它仍然是首选的方式。您可以使用SQLite扩展来帮助 https://bitbucket.org/twincoders/sqlite-net-extensions

你可以谷歌以上任何一个,有很多关于提到的所有资源(没有EF7)

更新

是的,您可以让它自动映射回对象,SQLite PCL.NET 为您执行此操作,您可以使用泛型调用方法。

    // Set a variable to your SQLiteAsyncConnection
    database = sqlLite.GetAsyncConnection();
    // Call a query and have it map back to the object type
    public async Task<List<T>> QueryAsync<T>(string queryText, params Object[] args) where T : class, new()
    {
        return await database.QueryAsync<T>(queryText, args);
    }
    // Or here is another helper function
    public async Task<List<T>> GetAllAsync<T>() where T : class, new()
    {
        return await database.Table<T>().ToListAsync();           
    }

例如

    public class MyTable
    {
        public string ColumnName { get; set; }
    }

    await GetAllAsync<MyTable>();