C# 使用FK关系将数据插入数据库
我首先使用代码在运行时生成数据库和数据 我的两个类/模型具有一对多关系。由于FK不能为空,我首先插入一个标准,然后再插入一个学生,我还手动输入FK ID。但是我仍然得到C# 使用FK关系将数据插入数据库,c#,wpf,entity-framework-6,code-first,sql-server-2016-express,C#,Wpf,Entity Framework 6,Code First,Sql Server 2016 Express,我首先使用代码在运行时生成数据库和数据 我的两个类/模型具有一对多关系。由于FK不能为空,我首先插入一个标准,然后再插入一个学生,我还手动输入FK ID。但是我仍然得到System.NullReferenceException,我就是不明白为什么 我试着在谷歌上搜索,但我找不到关于在代码中从头开始插入具有外来关系的数据的相关文章 我的实体类/模型 public class Student { public Student() { } public int StudentID {
System.NullReferenceException
,我就是不明白为什么
我试着在谷歌上搜索,但我找不到关于在代码中从头开始插入具有外来关系的数据的相关文章
我的实体类/模型
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; } }
不要手动添加您的
标准ID
,请执行以下操作:
using (MyDbContext ctx = new MyDbContext())
{
Standard std = new Standard();
Student stud = new Student()
{
StudentName = "John",
};
stud.Standard = std;
ctx.Student.Add(stud);
ctx.SaveChanges();
}
EF将处理关系。我同意,不要单独添加实体,但在尝试更新根实体下的相关表时要小心。这与添加操作不同。对于更新,您必须遍历整个树并将其设置为修改的或附加的。您的意思是即使使用EF,我也必须循环遍历每个条目并比较其原始状态,然后手动将其设置为修改的?对于标量类型,无需担心它们。请看一看实体类型。但是,对于导航属性,是的,如果使用分离的对象,则必须单独处理它们(据我所知,欢迎更新)。
using (MyDbContext ctx = new MyDbContext())
{
Standard std = new Standard();
Student stud = new Student()
{
StudentName = "John",
};
stud.Standard = std;
ctx.Student.Add(stud);
ctx.SaveChanges();
}