实体框架 SQLite 外键适用于保存但不适用于读取

Chr*_*ice 5 c# sqlite entity-framework entity-framework-core

我有一个带有 EF Core 2.0.1 的 xamarin 应用程序,并且遇到了一个奇怪的问题,即外键在我的 SQLite 数据库中行为不正常。

看起来外键可以保存,但是当我恢复实体时,外键属性将始终为空。我检查了 SQLLIte 数据库文件,它在表上有一个外键约束,并且启用了 PRAGMA。

我在这里做错了什么?

我的模型带钥匙

    /// <summary>
    /// The id of the form template
    /// </summary>
    public int TemplateId { get; set; }

    /// <summary>
    /// Link to the template
    /// </summary>
    [ForeignKey("TemplateId")]
    public virtual FormTemplate FormTemplate { get; set; }
Run Code Online (Sandbox Code Playgroud)

映射的模型

    /// <summary>
    /// Identifier for the form template.
    /// This comes from the API.
    /// </summary>
    [Key]
    public int Id { get; set; }
Run Code Online (Sandbox Code Playgroud)

我的数据上下文初始值设定项

    /// <summary>
    /// Constructor
    /// </summary>
    public DatabaseContext(string databaseFilePath)
    {
        DatabaseFilePath = databaseFilePath;
        Database.EnsureCreated(); // Use this in testing so that we don't have to make migrations on every db change
        Database.ExecuteSqlCommand("PRAGMA foreign_keys = ON");
    }

    protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
    {
        optionsBuilder.UseSqlite($"Filename={DatabaseFilePath}");
    }
Run Code Online (Sandbox Code Playgroud)

这是查看数据库时创建的 SQL 模式

CREATE TABLE `FormsMessages` (
    `Id`    INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,
    `TemplateId`    INTEGER NOT NULL,
    CONSTRAINT `FK_FormsMessages_FormTemplates_TemplateId` FOREIGN KEY(`TemplateId`) REFERENCES `FormTemplates`(`Id`) ON DELETE CASCADE
);
Run Code Online (Sandbox Code Playgroud)

编译指示 SQL 数据库

看来 SQL BD 受到 EF 模型的约束。然而,当我尝试浏览导航属性时,即使我将其保存为 ,它FormTemplate也总是如此。(顺便说一句,当我这样做时,数据库资源管理器显示 templateId 已被填充。)nullFormTemplate = myinstance