C# 从尚未';我还没有得救
我有一个场景,需要在表中插入一条记录——myPerson实体以获取personID(int标识)。然后我需要把这个personID添加到familyAdmin.personID中 我希望在一个db.SaveChange()中完成所有这一切 由于person实体是userAdmin实体的一部分,有没有一种方法可以在一个实体中实现这一点 目前我是如何设置的: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
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。有什么想法吗?