我有一个带有EF Core 2.0.1的xamarin应用程序,并且我的SQLite数据库中的外键表现不正常。
外键似乎可以保存,但是当我恢复实体时,外键属性将始终为null。我检查了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。)