У меня есть приложение xamarin с EF Core 2.0.1, и у меня странная проблема с внешними ключами, которые не работают должным образом в моей базе данных 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; }
Сопоставленная модель
/// <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
);
Похоже, что BD SQL имеет ограничение из модели EF.Тем не менее, когда я пытаюсь просмотреть свойство навигации, FormTemplate
всегда равно null
, даже если я сохраню его с FormTemplate = myinstance
.(Кстати, проводник базы данных показывает, что templateId заполняется, когда я делаю это.)