Мне было интересно, почему EF пытается добавить и иностранные модели.
Пример:
public class Category
{
public int Id { get; set; }
public string Name{ get; set; }
}
public class Content
{
public int Id { get; set; }
public string Name{ get; set; }
public Category Category{ get; set; }
}
После создания «Контента» с помощью миграций у меня есть таблица, которая содержит идентификатор категории. Это создать. Итак, у меня есть три столбца: Id, name и categoryId. Кажется, EF «знает», что это должен быть только первичный ключ Category, который нужно сохранить.
Чем я пытался что-то добавить с помощью EF.
var cat = new Category {Id = 2, Name = "awesomeCat"})
var addContent = new Content({Name = "test", Category = cat})
Теперь я хочу добавить Контент с помощью _context.Add (addContent). Я ожидал одну вставку в базу данных, которая использует имя «test» и categoryId 2. Id будет сгенерирован DB.
Но вместо этого EF также пытается добавить новую категорию в таблицу категорий.
Итак, я посмотрел глубже и, похоже, EF «не знает», что он уже существует, и не поддерживал транзакции, касающиеся модели категории.
Я сделал еще одну попытку и не использовал новую категорию, вместо этого я загружал ее раньше:
var cat = _context.findById ("2");
и назначил этот вместо. Теперь EF должен знать, что он уже существует и не должен добавлять его в таблицу категорий.
Может быть, моя модель просто не права.
Нужно ли использовать его больше как:
public class Content
{
public int Id { get; set; }
public string Name{ get; set; }
public int? CategoryId{ get; set; }
[ForeignKey("CategoryId")]
public Category Category{ get; set; }
}
Разве я не получу две ссылки на категории?