[英]Using Entity Framework to save data that have foreign key constraints
我正在編寫一個從文件中讀取數據然后更新數據庫的代碼(即刪除整個數據庫並重新填充表格)
我有以下4
CREATE TABLE Courses (
[Id] INT IDENTITY (1, 1) NOT NULL,
[Name] NVARCHAR (50) NULL,
[SubjectCode] INT NOT NULL,
CONSTRAINT [PK_Courses] PRIMARY KEY CLUSTERED ([Id] ASC),
);
CREATE TABLE Specializtions (
[Id] INT NOT NULL,
[Name] NVARCHAR (50) NULL,
[DepId] INT NULL,
PRIMARY KEY CLUSTERED ([Id] ASC),
CONSTRAINT [FK_Specializtions_To_Departments] FOREIGN KEY ([DepId]) REFERENCES [dbo].[Departments] ([Id]) ON DELETE CASCADE ON UPDATE CASCADE
);
CREATE TABLE Courses_Specializations (
[CourseId] INT NOT NULL,
[SpecId] INT NOT NULL,
PRIMARY KEY CLUSTERED ([CourseId] ASC, [SpecId] ASC),
CONSTRAINT [FK_Courses_Specializations_ToSpecializtions] FOREIGN KEY ([SpecId]) REFERENCES [dbo].[Specializtions] ([Id]) ON DELETE CASCADE,
CONSTRAINT [FK_Courses_Specializations_ToCourses] FOREIGN KEY ([CourseId]) REFERENCES [dbo].[Courses] ([Id]) ON DELETE CASCADE
);
CREATE TABLE Departments (
[Id] INT NOT NULL,
[Name] NVARCHAR (20) NULL,
PRIMARY KEY CLUSTERED ([Id] ASC)
);
我正在使用以下代碼:
CoursesEntities ctx = new CoursesEntities();
// create 3 lists with relevant data and enters them to db
ctx.Departments.AddRange(departments);
ctx.Courses.AddRange(courses);
ctx.Specializtions.AddRange(specializations);
ctx.SaveChanges();
每當我想刪除整個數據庫並用不同的行重新填充數據時,我會得到一些錯誤的錯誤,說“無法插入或更新實體,因為'X'關系的主要末端被刪除了。” 其中X是一些fk約束..
我想我的問題是更新表Courses_Specializations,因為這個表只包含外鍵,所以我更新這個表的方法是創建1個特化和1個課程,並使用導航屬性將它們相互連接
另一個需要注意的重要事項是,當我執行以下操作時
它工作得很好..但是當我這樣做
它引發了異常
為了確定問題在哪里嘗試在每個ctx.SaveChanges()上設置斷點; 並調試您的應用程序
ctx.Departments.AddRange(departments);
ctx.SaveChanges();
ctx.Courses.AddRange(courses);
ctx.SaveChanges();
ctx.Specializtions.AddRange(specializations);
ctx.SaveChanges();
找到導致問題的表后,使用foreach循環嘗試為每個條目插入和SaveChanges並檢查哪個行有問題。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.