如何使用 SQLite.Net-PCL 制作 SQLite 外键

问题描述 投票:0回答:2

在 UWP 中,我享受使用 SQLite.Net-PCL 的好处,创建要在应用程序中用作 ObservableCollections 的类以绑定到 GridView。 在包含 SQLiteNetExtensions 来构建带有外键的数据库后,我注意到在 SQLite Maestro 中查看数据库时,外键并未真正创建。 相反,会创建索引。 如果 SQLiteNetExtensions 不真正创建外键,那么它有什么好处?

使用 LAMDA 表达式或 LINQ 进行查询时,也许不需要外键(稍后在创建数据库后在应用程序中)。 如果我在没有使用 SQLite.Net-PCL 的情况下执行查询来创建带有外键的表,我还可以使用 SQLite.Net-PCL 继续将 ObservableCollections 绑定到 GridViews 吗?

示例数据库:

[Table("Book")]
public class Book
{
    [PrimaryKey, AutoIncrement, Column("ID")]
    public int ID { get; set; }
    [Column("Name")]
    public string Name { get; set; }

    [ManyToMany]
    public List<Checkout> Checkout { get; set; }
}

[Table("School")]
public class School
{
    [PrimaryKey, AutoIncrement, Column("ID")]
    public int ID { get; set; }
    [Column("Name")]
    public string Name { get; set; }

    [OneToMany]
    public List<Student> Student { get; set; }
    [ManyToMany]
    public List<Checkout> Checkout { get; set; }
}

[Table("Student")]
public class Student
{
    [PrimaryKey, AutoIncrement, Column("ID")]
    public int ID { get; set; }
    [Column("SchoolID"), ForeignKey(typeof(School))]
    public int SchoolID { get; set; }
    [Column("Name")]
    public string Name { get; set; }

    [ManyToOne]
    public School School { get; set; }
}

[Table("Checkout")]
public class Checkout
{
    [PrimaryKey, AutoIncrement, Column("ID")]
    public int ID { get; set; }
    [Column("SchoolID"), ForeignKey(typeof(School))]
    public int SchoolID { get; set; }
    [Column("BookID"), ForeignKey(typeof(Book))]
    public int BookID { get; set; }
}

SQLite 对我来说是新的,有很多 SQLite Nuget 包可供选择。 教程已经有几年了,所以现在可能有更好的东西。 预先感谢。

c# uwp maui sqlite-net sqlite-net-extensions
2个回答
2
投票

即使您将实体框架核心与 UWP 应用程序一起用于数据访问,外键也不可用。 默认情况下,SQLite 中未启用外键

https://learn.microsoft.com/en-us/ef/core/providers/sqlite/limitations

https://sqlite.org/foreignkeys.html


1
投票

这里有来自官方网站的示例如何在 SQLite 中使用外键。

© www.soinside.com 2019 - 2024. All rights reserved.