Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/33.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 从尚未';我还没有得救_C#_Asp.net_Entity Framework - Fatal编程技术网

C# 从尚未';我还没有得救

C# 从尚未';我还没有得救,c#,asp.net,entity-framework,C#,Asp.net,Entity Framework,我有一个场景,需要在表中插入一条记录——myPerson实体以获取personID(int标识)。然后我需要把这个personID添加到familyAdmin.personID中 我希望在一个db.SaveChange()中完成所有这一切 由于person实体是userAdmin实体的一部分,有没有一种方法可以在一个实体中实现这一点 目前我是如何设置的: userAdmin familyAdmin = new userAdmin(); familyAdmin.signupDate = DateT

我有一个场景,需要在表中插入一条记录——myPerson实体以获取personID(int标识)。然后我需要把这个personID添加到familyAdmin.personID中

我希望在一个db.SaveChange()中完成所有这一切

由于person实体是userAdmin实体的一部分,有没有一种方法可以在一个实体中实现这一点

目前我是如何设置的:

userAdmin familyAdmin = new userAdmin();
familyAdmin.signupDate = DateTime.Today;
familyAdmin.lastLogin = DateTime.Today;
familyAdmin.registrationID = newReg.registrationID;

person myPerson = new person();
myPerson.personName = newReg.name;
myPerson.personEmail = newReg.email;
myPerson.personPhone = newReg.phone;
myPerson.personPhoneCarrier = newReg.carrierName;
myPerson.personDOB = newReg.dob;
myPerson.familyID = familyAdmin.familyID;
myPerson.personTypeID = newReg.personTypeID;

familyAdmin.personID = myPerson.personID;
familyAdmin.people.Add(myPerson);

db.userAdmins.Add(familyAdmin);
db.SaveChanges();
此选项当前不起作用。执行此选项时不会生成任何错误。我得到的是0,而不是1,2,3等等

插入到person表中的操作正在进行,并且正在正确生成ID。正是当我试图检索该ID以在获取0的同时将其插入UserAdmin表时

我必须这样做吗:

person myPerson = new person();
myPerson.personName = newReg.name;
myPerson.personEmail = newReg.email;
myPerson.personPhone = newReg.phone;
myPerson.personPhoneCarrier = newReg.carrierName;
myPerson.personDOB = newReg.dob;
myPerson.familyID = familyAdmin.familyID;
myPerson.personTypeID = newReg.personTypeID;

db.person.Add(myPerson);
db.SaveChanges();


userAdmin familyAdmin = new userAdmin();
familyAdmin.signupDate = DateTime.Today;
familyAdmin.lastLogin = DateTime.Today;
familyAdmin.registrationID = newReg.registrationID;
familyAdmin.personID = myPerson.personID;

db.userAdmins.Add(familyAdmin);
db.SaveChanges();
userAdmin familyAdmin = new userAdmin();
familyAdmin.signupDate = DateTime.Today;
familyAdmin.lastLogin = DateTime.Today;
familyAdmin.registrationID = newReg.registrationID;

person myPerson = new person();
myPerson.personName = newReg.name;
myPerson.personEmail = newReg.email;
myPerson.personPhone = newReg.phone;
myPerson.personPhoneCarrier = newReg.carrierName;
myPerson.personDOB = newReg.dob;
// myPerson.familyID = familyAdmin.familyID; Not necessary
myPerson.personTypeID = newReg.personTypeID;

// familyAdmin.personID = myPerson.personID; Not necessary
familyAdmin.people.Add(myPerson);

db.userAdmins.Add(familyAdmin);
db.SaveChanges();
部分EDMX图像:

userAdmin familyAdmin = new userAdmin();
familyAdmin.signupDate = DateTime.Today;
familyAdmin.lastLogin = DateTime.Today;
familyAdmin.registrationID = newReg.registrationID;

person myPerson = new person();
myPerson.personName = newReg.name;
myPerson.personEmail = newReg.email;
myPerson.personPhone = newReg.phone;
myPerson.personPhoneCarrier = newReg.carrierName;
myPerson.personDOB = newReg.dob;
myPerson.familyID = familyAdmin.familyID;
myPerson.personTypeID = newReg.personTypeID;

familyAdmin.personID = myPerson.personID;
familyAdmin.people.Add(myPerson);

db.userAdmins.Add(familyAdmin);
db.SaveChanges();

由于以下两行原因,第一个选项不起作用:

myPerson.familyID = familyAdmin.familyID;

familyAdmin.personID = myPerson.personID;
这些行不是必需的,因为您正在检查未在数据库中创建的标识符

您的代码应该如下所示:

person myPerson = new person();
myPerson.personName = newReg.name;
myPerson.personEmail = newReg.email;
myPerson.personPhone = newReg.phone;
myPerson.personPhoneCarrier = newReg.carrierName;
myPerson.personDOB = newReg.dob;
myPerson.familyID = familyAdmin.familyID;
myPerson.personTypeID = newReg.personTypeID;

db.person.Add(myPerson);
db.SaveChanges();


userAdmin familyAdmin = new userAdmin();
familyAdmin.signupDate = DateTime.Today;
familyAdmin.lastLogin = DateTime.Today;
familyAdmin.registrationID = newReg.registrationID;
familyAdmin.personID = myPerson.personID;

db.userAdmins.Add(familyAdmin);
db.SaveChanges();
userAdmin familyAdmin = new userAdmin();
familyAdmin.signupDate = DateTime.Today;
familyAdmin.lastLogin = DateTime.Today;
familyAdmin.registrationID = newReg.registrationID;

person myPerson = new person();
myPerson.personName = newReg.name;
myPerson.personEmail = newReg.email;
myPerson.personPhone = newReg.phone;
myPerson.personPhoneCarrier = newReg.carrierName;
myPerson.personDOB = newReg.dob;
// myPerson.familyID = familyAdmin.familyID; Not necessary
myPerson.personTypeID = newReg.personTypeID;

// familyAdmin.personID = myPerson.personID; Not necessary
familyAdmin.people.Add(myPerson);

db.userAdmins.Add(familyAdmin);
db.SaveChanges();

如果您使用
familyAdmin.people.Add(myPerson)正确配置了
userAdmin
实体上的
people
属性和
person
实体之间的关系
调用db.SaveChanges()
然后EF将在内部调用
DetectChanges
,以便修复这两个实体之间的关系,并以正确的顺序生成正确的SQL,因为它知道哪个实体需要先插入,哪个实体需要外键id。

并且选项一对您不起作用吗?是的,这是正确的。-我更新了我的问题以反映这一点。当它不起作用时,它说了什么?错误消息?如果导航属性设置正确,您应该能够通过将myPerson分配到
familyAdmin.Person=myPerson,在一次调用中完成所有操作
或类似的东西。@CodeNotFound-我更新了我的问题。没有错误,我只得到一个0而不是1,2,3(因为它是表的标识)。但是,插入到person表中的操作正在进行,并且正确生成了ID。就在我试图检索该ID以同时插入UserAdmin表时,我将尝试一下。谢谢-我能够将familyID放入person实体中,但personID在userAdmin实体中仍然为0。有什么想法吗?