微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决使用实体框架将数据保存到 SQL Server 时的外键问题

C# code and database view

这是我的数据库架构:

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 保存的相同大学名称。 1所学院拥有1所大学,1所大学拥有多所学院。当我选择一所大学时,如果之前选择了该大学,我想将相同的 UniversityID(外键)保存到 Enstitute 表中,而不是新的外键 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();

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。