使用实体框架将数据保存到SQL Server时出现外键问题



C#代码和数据库视图

这是我的数据库模式:

CREATE TABLE University 
(
UniversityID int NOT NULL IDENTITY,
UniversityName nvarchar(100) NOT NULL,
PRIMARY KEY (UniversityID)
)
CREATE TABLE Enstitute 
(
EnstituteID int NOT NULL IDENTITY,
UniversityID int NOT NULL,
EnstituteName nvarchar(100),
PRIMARY KEY (EnstituteID),
FOREIGN KEY (UniversityID) REFERENCES University(UniversityID)
) 

实体框架代码的一部分:

en.EnstituteName = enstituteBox.Text; //entitute name input
uni.UniversityName = universityBox.Text;  //university name input
db.Enstitute.Add(en);
db.University.Add(uni);
db.SaveChanges(); 

我的问题是,当我添加用户输入的数据时,我会写下相同的大学名称,但在数据库中记录了用不同的UniversityID保存的相同大学名称。一个学院有一所大学,一所大学有一个以上的学院。当我选择一所大学时,如果之前选择了该大学,我想保存到同一所大学ID(外键(到Entitute表,而不是新的外键ID。有人能帮我吗?

据我所知,问题是即使已经存在,你也在添加大学。你的PK指向ID,所以名称不在其中。可能你需要指定一个双PK或检查大学名称是否已经存在。

试试这个

var university = await db.University.FirstOrDefaultAsync(x =>x.UniversityName == uni.UniversityName);  
if(university == null){   
//your code 
}
else 
{   
en.UniversityId = university.UniversityId;   
db.Enstitude.Add(en);
}  
await db.SaveChangesAsync();

相关内容

  • 没有找到相关文章

最新更新