c# - 实体框架 SQLite 外键适用于保存但不读取
问题描述
我有一个带有 EF Core 2.0.1 的 xamarin 应用程序,并且在我的 SQLite 数据库中外键无法正常运行时遇到了一个奇怪的问题。
看来外键可以保存,但是当我恢复实体时,外键属性将始终为空。我检查了 SQLLIte db 文件,它在表上有一个外键约束,并且启用了 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; }
映射模型
/// <summary>
/// Identifier for the form template.
/// This comes from the API.
/// </summary>
[Key]
public int Id { get; set; }
我的数据上下文初始化器
/// <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}");
}
这是查看数据库时创建的 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
);
SQL BD 似乎受到 EF 模型的约束。然而,当我尝试浏览导航属性时,FormTemplate
即使null
我将其保存为FormTemplate = myinstance
. (顺便说一句,当我这样做时,数据库资源管理器显示 templateId 被填充。)
解决方案
推荐阅读
- ember.js - How to call action of child component on parent events in ember JS
- c# - How to reversely play a video in unity?
- laravel - Laravel : Controller not found
- angular - angular 4 Production Build issue
- python - 用二进制numpy数组提取熊猫索引
- postgresql - 通过在 JSONB 列上应用过滤器来查询 postgresql 中的数据
- python - 在python中尝试块
- php - 如何为 4 个组合唯一的列创建自定义验证规则
- sql - Knex + Postgresql + node - 如何为选定的列调用 postgresql 函数
- tensorflow - 计算TensorFlow中可变序列长度的实际序列长度?