Я использую сначала код для генерации базы данных и данных во время выполнения.Вставьте данные в базу данных с отношением FK
Мои два класса/модели имеют отношения «один ко многим». Поскольку FK не может быть нулевым, я сначала вставляю Стандарт перед вставкой Студент, а также я также вручную вводим идентификатор FK. Но я все еще получаю System.NullReferenceException
, и я просто не понимаю, почему?
Я пробовал поиск по Google, но не могу найти связанную статью о вставке данных с иностранными отношениями с нуля в код-первый.
Мой Entity Класс/Модель
public class Student {
public Student() { }
public int StudentID { get; set; }
public string StudentName { get; set; }
public int StandardId { get; set; } // FK StandardId
public Standard Standard { get; set; } }
public class Standard {
public Standard() { }
public int StandardId { get; set; }
public string StandardName { get; set; }
public ICollection<Student> Students { get; set; } }
My Main
using (MyDbContext ctx = new MyDbContext())
{
Standard std = new Standard();
ctx.Standards.Add(std);
ctx.SaveChanges(); // Database already has a StandardID = 1
Student stud = new Student()
{
StudentName = "John",
StandardId = 1 // I even manually type in the FK
};
ctx.Student.Add(stud); // I still get 'System.NullReferenceException'
ctx.SaveChanges();
}
Согласен, не добавляйте сущности отдельно, но будьте осторожны при попытке обновить связанные таблицы под вашим корневым объектом. Иначе, чем операция «Добавить». Для обновления вам нужно выполнить итерацию по всему дереву и изменить их или «Прикрепить» их. – Deniz
Вы имеете в виду даже с EF, мне все равно нужно прокручивать каждую запись и сравнивать ее исходное состояние и изменять их вручную? – KMC
Для скалярных типов вам не о чем беспокоиться. Посмотрите на http://www.entityframeworktutorial.net/Types-of-Entities.aspx для типов сущностей. Однако для свойств навигации да, вы должны позаботиться о них отдельно, если работаете с отдельными объектами (насколько мне известно, обновления приветствуются). – Deniz