【问题标题】:Xamarin sqlite mapping models to database tableXamarin sqlite 将模型映射到数据库表
【发布时间】:2017-12-24 00:44:07
【问题描述】:

我使用以下指南为 xamarin 项目部署了一个数据库文件。 http://arteksoftware.com/deploying-a-database-file-with-a-xamarin-forms-app/

我这样创建了一个模型类:

[Table ("Person")]
public class Person  
{
    [PrimaryKey, AutoIncrement, Column("Id")]
    public int Id { get; set; }

    [NotNull, Column("Actor_Id")]
    public int ActorId { get; set; }
}

当我尝试在存储库中插入时

dbConn.Insert(newPerson);

我收到 SQLite.Net.SQLiteException:表 Person 没有名为 ActorId 的列。

如果数据库中的列名是 Actor_Id,那么模型中的 [Column] 属性不应该将其映射到表中。

【问题讨论】:

  • 您使用的是哪个库:SQLite.Net-PCL 还是 sqlite-net ?
  • 我正在使用 SQLite.Net-PCL
  • 我知道我可以将变量名称更改为 Actor_Id 以匹配表列,但我想知道是否可以通过列属性将其映射为不同的名称。
  • 是的,您可以使用不同名称的列属性。请删除旧的数据库和应用程序,然后重试。

标签: c# sqlite xamarin sqlite.net


【解决方案1】:

我发现问题在于我在模型中使用了 SQLite 库。将其更改为使用 SQLite.Net.Attributes 允许正确的映射。

using SQLite.Net.Attributes;

【讨论】:

    【解决方案2】:

    您的手机/模拟器以前部署的应用程序可能具有较旧的数据库架构。

    在这种情况下,您需要:

    • 删除手机/模拟器中的现有应用程序。然后下一次运行应该没问题,因为它是使用新的数据库模式创建的。或
    • 执行数据库升级脚本以更改当前旧数据库的架构。仅当您的应用已发布到商店时才执行此操作。

    【讨论】:

    • 我重新安装了应用程序,但仍然遇到同样的错误。我先添加了数据库文件,然后创建了模型。数据库附带现有数据。
    猜你喜欢
    • 1970-01-01
    • 2012-09-18
    • 1970-01-01
    • 1970-01-01
    • 2012-02-25
    • 1970-01-01
    • 2015-11-12
    • 1970-01-01
    • 2011-07-15
    相关资源
    最近更新 更多