SQLite-Net 扩展两个实体之间的一对一和一对多关系

2023-11-27

我将 SQLite-Net PCL 与 SQLite-Net 扩展一起使用,以使用 Xamarin 开发应用程序。

在我的模型中,我有两个实体,我们称它们为 A 和 B,它们通过一对一和一对多关系连接。例如,A与B是一对一的关系,A与B也是一对多的关系。

是否可以使用 SQLite-Net 扩展来表达这种行为?


是的,但是您必须在关系属性中显式声明外键和逆属性,因为否则库可能会获得错误的关系外键。

    public class ClassA
    {
        [PrimaryKey, AutoIncrement]
        public int Id { get; set; }

        [OneToMany("O2MClassAKey", "BObjectsInverse")]
        public List<ClassB> BObjects { get; set; }

        [OneToOne("O2OClassAKey", "BObjectInverse")]
        public ClassB BObject { get; set; }

        // Other properties
        public string Bar { get; set; }
    }
        
    public class ClassB
    {
        [PrimaryKey, AutoIncrement]
        public int Id { get; set; }

        [ForeignKey(typeof (ClassA))]
        public int O2MClassAKey { get; set; }

        [ForeignKey(typeof (ClassA))]
        public int O2OClassAKey { get; set; }

        // Inverse relationships, these are optional
        [ManyToOne("O2MClassAKey", "BObjects")]
        public ClassA BObjectsInverse { get; set; }
        [OneToOne("O2OClassAKey", "BObject")]
        public ClassA BObjectInverse { get; set; }

        // Other properties
        public string Foo { get; set; }
    }

请注意外键O2OClassAKey为了OneToOne关系可以在任何类中声明。

如果不需要逆向属性,可以在关系属性中跳过它们:

    public class ClassA
    {
        [PrimaryKey, AutoIncrement]
        public int Id { get; set; }

        [OneToMany("O2MClassAKey")]
        public List<ClassB> BObjects { get; set; }

        [OneToOne("O2OClassAKey")]
        public ClassB BObject { get; set; }

        // Other properties
        public string Bar { get; set; }
    }
        
    public class ClassB
    {
        [PrimaryKey, AutoIncrement]
        public int Id { get; set; }

        [ForeignKey(typeof (ClassA))]
        public int O2MClassAKey { get; set; }

        [ForeignKey(typeof (ClassA))]
        public int O2OClassAKey { get; set; }

        // Other properties
        public string Foo { get; set; }
    }
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

SQLite-Net 扩展两个实体之间的一对一和一对多关系 的相关文章

  • 可以使用两个独立的 SQLite 数据库吗?

    我有一个 sqlite 数据库 其中存储用户定义的信息和用户只读的信息 我觉得将来可能需要修改只读信息 并且我不想进行整个数据迁移 有没有一种方法可以使用单独的 sqlite 数据库来存储只读信息 该数据库可以轻松替换 如果是这样 您能否就
  • 更改 Xamarin 中 ListView 所选项目的背景颜色

    我在 Xamarin 中创建了一个主从类型项目 当我从主页中选择一个项目时 背景颜色默认为橙色 我怎样才能将其更改为我选择的颜色 此问题是 Android 特有的 在 Android 项目中将此行添加到 Resources values s
  • Heroku 上重启后 Better-SQLite3 数据库重置

    我有一个 Discord 机器人better sqlite3 https github com JoshuaWise better sqlite3硬币和 XP 数据库 直到两周前它一直工作得很好 现在 每次重新启动后 它只会恢复 XP 和硬
  • Xamarin 无法从异步获取实例

    我编写了一个通过蓝牙连接到 ESP32 的 Xamarin Forms 应用程序 现在我想从 MainPage xaml 页面的 CustomControl JoystickControl 获取值 我已经这样尝试过了 MainPage xa
  • 如何调试仅在发布模式下崩溃的 Android 应用程序

    在调试模式下一切正常 但在发布模式下崩溃 调试模式下有哪些所需权限在发布模式下未打开 EDIT 当我将 链接 设置为 无 时 我会通过第一个屏幕进入 登录 屏幕 但是 当我添加发布权限时Internet 第一次尝试读取远程实体框架核心表时它
  • Xamarin Forms WebView 打开外部链接

    我的应用程序中有一个网络视图 当单击外部链接 在普通浏览器中在新选项卡中打开 时 我无法返回我的网站 当打开一个新标签时 有可能像 Gmail 一样关闭该标签的菜单吗 目的是 每当单击链接时 用户都可以选择使用哪个选项来查看内容 例如单击链
  • 未选择为此解决方案配置构建项目

    错误 gt Skipped Deploy Project DrawShape Android Configuration Debug Any CPU gt Project not selected to build for this sol
  • Python 3 sqlite 参数化 SQL 查询

    我一直在尝试使用 Python 3 和 sqlite 模块进行参数化 SQL 查询 并且仅使用一个变量就成功了 但是 当使用两个变量时 我得到一个IndexError tuple index out of range错误 关于导致此错误的原
  • 如何在 Visual Studio for Mac 上开发 Windows 应用程序

    我最近购买了一台iMac 以便在更好的环境中在Visual Studio for Mac上开发我的应用程序 Windows上有很多问题 但是在Visual Studio for mac上 没有UWP项目 据了解 我必须创建一个新的 NET
  • 使用 Xamarin.Forms 和 Zxing 生成 QR 码

    我在网上看到了很多关于这个的内容 旧帖子 但似乎没有什么对我有用 我正在尝试从字符串中生成二维码并将其显示在应用程序中 这就是我一开始的情况 qrCode new ZXingBarcodeImageView BarcodeFormat Ba
  • Android - 正确使用 invalidateOptionsMenu()

    我一直在寻找很多invalidateOptionsMenu 我知道它的作用 但我想不出这种方法在现实生活中有用的任何例子 我的意思是 例如 假设我们要添加一个新的MenuItem to our ActionBar 我们可以简单地获取菜单on
  • Android:打开和关闭SQLite数据库

    我正在开发Android应用程序 我经常在其中访问本地数据库 该数据库可以从不同的主题访问 因此我遇到了数据库的协调问题 我使用以下open and close method public void open mDb mDbHelper g
  • 如何以编程方式检索 Visual Studio for Mac 的版本信息?

    我想在 Xamarin 应用程序的生成作业期间检索 Visual Studio for Mac 的版本信息 目标是将它们作为调试信息包含在二进制文件中 有没有办法以编程方式或使用 msbuild 的命令语句获取 Visual Studio
  • 如何在附加的 sqlite 数据库中创建外键?

    我正在尝试创建一个 sqlite3 数据库作为模拟生产环境的测试环境 由于生产的设置方式 表处于多个模式中 我已经在 DBIx Class 中设置了类 使用 schema gt storage gt dbh do将数据库与架构附加在一起 并
  • sqlite3从打印数据中删除括号

    我创建了一个脚本 用于查找数据库第一行中的最后一个值 import sqlite3 global SerialNum conn sqlite3 connect MyFirstDB db conn text factory str c con
  • Flutter:将字符串转换为 Map

    我正在使用 SQFlite 在本地存储数据 我有一个表 其中有一个名为 json 的字段 该字段的类型为 TEXT 并存储转换为字符串的 json 例如 name Eduardo Age 23 性别男 到目前为止 一切正常 但随后我需要从数
  • 填充 CoreData 创建的 sqlite 数据库

    我有一个由 CoreData 模型自动创建的 sqlite DB 但我的应用程序不会让用户能够将数据写入其中 而是我想用程序所需的所有数据预先填充它 我的问题是 CoreData 创建的 sqlite DB 具有未知的表和字段 这些表和字段
  • xaml UI 未以 xamarin 形式更新

    我将我的模型与我的 UI 绑定 在我的模型中 我做了一些计算 但其他属性与 UI 绑定 但我完成计算的某些属性不与我的 UI 绑定 而是在我的 OnPropertyChange 事件中显示计算 帮助我解决我的代码问题在哪里 提前致谢 我的模
  • 保护 APK 中的字符串

    我正在使用 Xamarin 的 Mono for Android 开发一个 Android 应用程序 我目前正在努力使用 Google Play API 添加应用内购买功能 为此 我需要从我的应用程序内向 Google 发送公共许可证密钥
  • SQLite 仅当值不为空时更新列

    Query UPDATE item table SET field1 field1 spanish field2 field2 spanish 问题 我怎样才能更新field1 with field1 spanish ONLY if fie

随机推荐