前言
本系列整理自EF 实体框架入门 。
数据库准备
该系列用到的数据库为 school,使用SQL Server。如果没有安装,可以使用VS附带的SQL Express。步骤省略,不清楚的可以使用“靠谱的”搜索引擎查找。
SQL脚本:
SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO -- 创建 Department 表。 IF NOT EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N‘[dbo].[Department]‘) AND type in (N‘U‘)) BEGIN CREATE TABLE [dbo].[Department]( [DepartmentID] [int] NOT NULL, [Name] [nvarchar](50) NOT NULL, [Budget] [money] NOT NULL, [StartDate] [datetime] NOT NULL, [Administrator] [int] NULL, CONSTRAINT [PK_Department] PRIMARY KEY CLUSTERED ( [DepartmentID] ASC )WITH (IGNORE_DUP_KEY = OFF) ON [PRIMARY] ) ON [PRIMARY] END GO -- 创建 Person 表。 IF NOT EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N‘[dbo].[Person]‘) AND type in (N‘U‘)) BEGIN CREATE TABLE [dbo].[Person]( [PersonID] [int] IDENTITY(1,1) NOT NULL, [LastName] [nvarchar](50) NOT NULL, [FirstName] [nvarchar](50) NOT NULL, [HireDate] [datetime] NULL, [EnrollmentDate] [datetime] NULL, [Discriminator] [nvarchar](50) NOT NULL, CONSTRAINT [PK_School.Student] PRIMARY KEY CLUSTERED ( [PersonID] ASC )WITH (IGNORE_DUP_KEY = OFF) ON [PRIMARY] ) ON [PRIMARY] END GO -- 创建 OnsiteCourse 表。 IF NOT EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N‘[dbo].[OnsiteCourse]‘) AND type in (N‘U‘)) BEGIN CREATE TABLE [dbo].[OnsiteCourse]( [CourseID] [int] NOT NULL, [Location] [nvarchar](50) NOT NULL, [Days] [nvarchar](50) NOT NULL, [Time] [smalldatetime] NOT NULL, CONSTRAINT [PK_OnsiteCourse] PRIMARY KEY CLUSTERED ( [CourseID] ASC )WITH (IGNORE_DUP_KEY = OFF) ON [PRIMARY] ) ON [PRIMARY] END GO -- 创建 OnlineCourse 表。 IF NOT EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N‘[dbo].[OnlineCourse]‘) AND type in (N‘U‘)) BEGIN CREATE TABLE [dbo].[OnlineCourse]( [CourseID] [int] NOT NULL, [URL] [nvarchar](100) NOT NULL, CONSTRAINT [PK_OnlineCourse] PRIMARY KEY CLUSTERED ( [CourseID] ASC )WITH (IGNORE_DUP_KEY = OFF) ON [PRIMARY] ) ON [PRIMARY] END GO -- 创建 StudentGrade 表。 IF NOT EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N‘[dbo].[StudentGrade]‘) AND type in (N‘U‘)) BEGIN CREATE TABLE [dbo].[StudentGrade]( [EnrollmentID] [int] IDENTITY(1,1) NOT NULL, [CourseID] [int] NOT NULL, [StudentID] [int] NOT NULL, [Grade] [decimal](3, 2) NULL, CONSTRAINT [PK_StudentGrade] PRIMARY KEY CLUSTERED ( [EnrollmentID] ASC )WITH (IGNORE_DUP_KEY = OFF) ON [PRIMARY] ) ON [PRIMARY] END GO -- 创建 CourseInstructor 表。 IF NOT EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N‘[dbo].[CourseInstructor]‘) AND type in (N‘U‘)) BEGIN CREATE TABLE [dbo].[CourseInstructor]( [CourseID] [int] NOT NULL, [PersonID] [int] NOT NULL, CONSTRAINT [PK_CourseInstructor] PRIMARY KEY CLUSTERED ( [CourseID] ASC, [PersonID] ASC )WITH (IGNORE_DUP_KEY = OFF) ON [PRIMARY] ) ON [PRIMARY] END GO -- 创建 Course 表。 IF NOT EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N‘[dbo].[Course]‘) AND type in (N‘U‘)) BEGIN CREATE TABLE [dbo].[Course]( [CourseID] [int] NOT NULL, [Title] [nvarchar](100) NOT NULL, [Credits] [int] NOT NULL, [DepartmentID] [int] NOT NULL, CONSTRAINT [PK_School.Course] PRIMARY KEY CLUSTERED ( [CourseID] ASC )WITH (IGNORE_DUP_KEY = OFF) ON [PRIMARY] ) ON [PRIMARY] END GO -- 创建 OfficeAssignment 表。 IF NOT EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N‘[dbo].[OfficeAssignment]‘) AND type in (N‘U‘)) BEGIN CREATE TABLE [dbo].[OfficeAssignment]( [InstructorID] [int] NOT NULL, [Location] [nvarchar](50) NOT NULL, [Timestamp] [timestamp] NOT NULL, CONSTRAINT [PK_OfficeAssignment] PRIMARY KEY CLUSTERED ( [InstructorID] ASC )WITH (IGNORE_DUP_KEY = OFF) ON [PRIMARY] ) ON [PRIMARY] END GO -- 定义 OnsiteCourse 与 Course 之间的关系。 IF NOT EXISTS (SELECT * FROM sys.foreign_keys WHERE object_id = OBJECT_ID(N‘[dbo].[FK_OnsiteCourse_Course]‘) AND parent_object_id = OBJECT_ID(N‘[dbo].[OnsiteCourse]‘)) ALTER TABLE [dbo].[OnsiteCourse] WITH CHECK ADD CONSTRAINT [FK_OnsiteCourse_Course] FOREIGN KEY([CourseID]) REFERENCES [dbo].[Course] ([CourseID]) GO ALTER TABLE [dbo].[OnsiteCourse] CHECK CONSTRAINT [FK_OnsiteCourse_Course] GO -- 定义 OnlineCourse 与 Course 之间的关系。 IF NOT EXISTS (SELECT * FROM sys.foreign_keys WHERE object_id = OBJECT_ID(N‘[dbo].[FK_OnlineCourse_Course]‘) AND parent_object_id = OBJECT_ID(N‘[dbo].[OnlineCourse]‘)) ALTER TABLE [dbo].[OnlineCourse] WITH CHECK ADD CONSTRAINT [FK_OnlineCourse_Course] FOREIGN KEY([CourseID]) REFERENCES [dbo].[Course] ([CourseID]) GO ALTER TABLE [dbo].[OnlineCourse] CHECK CONSTRAINT [FK_OnlineCourse_Course] GO -- 定义 StudentGrade 与 Course 之间的关系。 IF NOT EXISTS (SELECT * FROM sys.foreign_keys WHERE object_id = OBJECT_ID(N‘[dbo].[FK_StudentGrade_Course]‘) AND parent_object_id = OBJECT_ID(N‘[dbo].[StudentGrade]‘)) ALTER TABLE [dbo].[StudentGrade] WITH CHECK ADD CONSTRAINT [FK_StudentGrade_Course] FOREIGN KEY([CourseID]) REFERENCES [dbo].[Course] ([CourseID]) GO ALTER TABLE [dbo].[StudentGrade] CHECK CONSTRAINT [FK_StudentGrade_Course] GO -- 定义 StudentGrade 与 Student 之间的关系。 IF NOT EXISTS (SELECT * FROM sys.foreign_keys WHERE object_id = OBJECT_ID(N‘[dbo].[FK_StudentGrade_Student]‘) AND parent_object_id = OBJECT_ID(N‘[dbo].[StudentGrade]‘)) ALTER TABLE [dbo].[StudentGrade] WITH CHECK ADD CONSTRAINT [FK_StudentGrade_Student] FOREIGN KEY([StudentID]) REFERENCES [dbo].[Person] ([PersonID]) GO ALTER TABLE [dbo].[StudentGrade] CHECK CONSTRAINT [FK_StudentGrade_Student] GO -- 定义 CourseInstructor 与 Course 之间的关系。 IF NOT EXISTS (SELECT * FROM sys.foreign_keys WHERE object_id = OBJECT_ID(N‘[dbo].[FK_CourseInstructor_Course]‘) AND parent_object_id = OBJECT_ID(N‘[dbo].[CourseInstructor]‘)) ALTER TABLE [dbo].[CourseInstructor] WITH CHECK ADD CONSTRAINT [FK_CourseInstructor_Course] FOREIGN KEY([CourseID]) REFERENCES [dbo].[Course] ([CourseID]) GO ALTER TABLE [dbo].[CourseInstructor] CHECK CONSTRAINT [FK_CourseInstructor_Course] GO -- 定义 CourseInstructor 与 Person 之间的关系。 IF NOT EXISTS (SELECT * FROM sys.foreign_keys WHERE object_id = OBJECT_ID(N‘[dbo].[FK_CourseInstructor_Person]‘) AND parent_object_id = OBJECT_ID(N‘[dbo].[CourseInstructor]‘)) ALTER TABLE [dbo].[CourseInstructor] WITH CHECK ADD CONSTRAINT [FK_CourseInstructor_Person] FOREIGN KEY([PersonID]) REFERENCES [dbo].[Person] ([PersonID]) GO ALTER TABLE [dbo].[CourseInstructor] CHECK CONSTRAINT [FK_CourseInstructor_Person] GO -- 定义 Course 与 Department 之间的关系。 IF NOT EXISTS (SELECT * FROM sys.foreign_keys WHERE object_id = OBJECT_ID(N‘[dbo].[FK_Course_Department]‘) AND parent_object_id = OBJECT_ID(N‘[dbo].[Course]‘)) ALTER TABLE [dbo].[Course] WITH CHECK ADD CONSTRAINT [FK_Course_Department] FOREIGN KEY([DepartmentID]) REFERENCES [dbo].[Department] ([DepartmentID]) GO ALTER TABLE [dbo].[Course] CHECK CONSTRAINT [FK_Course_Department] GO -- 定义 OfficeAssignment 与 Person 之间的关系。 IF NOT EXISTS (SELECT * FROM sys.foreign_keys WHERE object_id = OBJECT_ID(N‘[dbo].[FK_OfficeAssignment_Person]‘) AND parent_object_id = OBJECT_ID(N‘[dbo].[OfficeAssignment]‘)) ALTER TABLE [dbo].[OfficeAssignment] WITH CHECK ADD CONSTRAINT [FK_OfficeAssignment_Person] FOREIGN KEY([InstructorID]) REFERENCES [dbo].[Person] ([PersonID]) GO ALTER TABLE [dbo].[OfficeAssignment] CHECK CONSTRAINT [FK_OfficeAssignment_Person] GO -- 创建 InsertOfficeAssignment 存储过程。 IF NOT EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N‘[dbo].[InsertOfficeAssignment]‘) AND type in (N‘P‘, N‘PC‘)) BEGIN EXEC dbo.sp_executesql @statement = N‘ CREATE PROCEDURE [dbo].[InsertOfficeAssignment] @InstructorID int, @Location nvarchar(50) AS INSERT INTO dbo.OfficeAssignment (InstructorID, Location) VALUES (@InstructorID, @Location); IF @@ROWCOUNT > 0 BEGIN SELECT [Timestamp] FROM OfficeAssignment WHERE [email protected]; END ‘ END GO -- 创建 UpdateOfficeAssignment 存储过程。 IF NOT EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N‘[dbo].[UpdateOfficeAssignment]‘) AND type in (N‘P‘, N‘PC‘)) BEGIN EXEC dbo.sp_executesql @statement = N‘ CREATE PROCEDURE [dbo].[UpdateOfficeAssignment] @InstructorID int, @Location nvarchar(50), @OrigTimestamp timestamp AS UPDATE OfficeAssignment SET [email protected] WHERE [email protected] AND [Timestamp][email protected]; IF @@ROWCOUNT > 0 BEGIN SELECT [Timestamp] FROM OfficeAssignment WHERE [email protected]; END ‘ END GO -- 创建 DeleteOfficeAssignment 存储过程。 IF NOT EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N‘[dbo].[DeleteOfficeAssignment]‘) AND type in (N‘P‘, N‘PC‘)) BEGIN EXEC dbo.sp_executesql @statement = N‘ CREATE PROCEDURE [dbo].[DeleteOfficeAssignment] @InstructorID int AS DELETE FROM OfficeAssignment WHERE [email protected]; ‘ END GO -- 创建 DeletePerson 存储过程。 IF NOT EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N‘[dbo].[DeletePerson]‘) AND type in (N‘P‘, N‘PC‘)) BEGIN EXEC dbo.sp_executesql @statement = N‘ CREATE PROCEDURE [dbo].[DeletePerson] @PersonID int AS DELETE FROM Person WHERE PersonID = @PersonID; ‘ END GO -- 创建 UpdatePerson 存储过程。 IF NOT EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N‘[dbo].[UpdatePerson]‘) AND type in (N‘P‘, N‘PC‘)) BEGIN EXEC dbo.sp_executesql @statement = N‘ CREATE PROCEDURE [dbo].[UpdatePerson] @PersonID int, @LastName nvarchar(50), @FirstName nvarchar(50), @HireDate datetime, @EnrollmentDate datetime, @Discriminator nvarchar(50) AS UPDATE Person SET [email protected], [email protected], [email protected], [email protected], [email protected] WHERE [email protected]; ‘ END GO -- 创建 InsertPerson 存储过程。 IF NOT EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N‘[dbo].[InsertPerson]‘) AND type in (N‘P‘, N‘PC‘)) BEGIN EXEC dbo.sp_executesql @statement = N‘ CREATE PROCEDURE [dbo].[InsertPerson] @LastName nvarchar(50), @FirstName nvarchar(50), @HireDate datetime, @EnrollmentDate datetime, @Discriminator nvarchar(50) AS INSERT INTO dbo.Person (LastName, FirstName, HireDate, EnrollmentDate, Discriminator) VALUES (@LastName, @FirstName, @HireDate, @EnrollmentDate, @Discriminator); SELECT SCOPE_IDENTITY() as NewPersonID; ‘ END GO -- 创建 GetStudentGrades 存储过程。 IF NOT EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N‘[dbo].[GetStudentGrades]‘) AND type in (N‘P‘, N‘PC‘)) BEGIN EXEC dbo.sp_executesql @statement = N‘ CREATE PROCEDURE [dbo].[GetStudentGrades] @StudentID int AS SELECT EnrollmentID, Grade, CourseID, StudentID FROM dbo.StudentGrade WHERE StudentID = @StudentID ‘ END GO -- 创建 GetDepartmentName 存储过程。 IF NOT EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N‘[dbo].[GetDepartmentName]‘) AND type in (N‘P‘, N‘PC‘)) BEGIN EXEC dbo.sp_executesql @statement = N‘ CREATE PROCEDURE [dbo].[GetDepartmentName] @ID int, @Name nvarchar(50) OUTPUT AS SELECT @Name = Name FROM Department WHERE DepartmentID = @ID ‘ END GO -- 将数据插到 Person 表中。 USE School GO SET IDENTITY_INSERT dbo.Person ON GO INSERT INTO dbo.Person (PersonID, LastName, FirstName, HireDate, EnrollmentDate, Discriminator) VALUES (1, ‘Abercrombie‘, ‘Kim‘, ‘1995-03-11‘, null, ‘Instructor‘); INSERT INTO dbo.Person (PersonID, LastName, FirstName, HireDate, EnrollmentDate, Discriminator) VALUES (2, ‘Barzdukas‘, ‘Gytis‘, null, ‘2005-09-01‘, ‘Student‘); INSERT INTO dbo.Person (PersonID, LastName, FirstName, HireDate, EnrollmentDate, Discriminator) VALUES (3, ‘Justice‘, ‘Peggy‘, null, ‘2001-09-01‘, ‘Student‘); INSERT INTO dbo.Person (PersonID, LastName, FirstName, HireDate, EnrollmentDate, Discriminator) VALUES (4, ‘Fakhouri‘, ‘Fadi‘, ‘2002-08-06‘, null, ‘Instructor‘); INSERT INTO dbo.Person (PersonID, LastName, FirstName, HireDate, EnrollmentDate, Discriminator) VALUES (5, ‘Harui‘, ‘Roger‘, ‘1998-07-01‘, null, ‘Instructor‘); INSERT INTO dbo.Person (PersonID, LastName, FirstName, HireDate, EnrollmentDate, Discriminator) VALUES (6, ‘Li‘, ‘Yan‘, null, ‘2002-09-01‘, ‘Student‘); INSERT INTO dbo.Person (PersonID, LastName, FirstName, HireDate, EnrollmentDate, Discriminator) VALUES (7, ‘Norman‘, ‘Laura‘, null, ‘2003-09-01‘, ‘Student‘); INSERT INTO dbo.Person (PersonID, LastName, FirstName, HireDate, EnrollmentDate, Discriminator) VALUES (8, ‘Olivotto‘, ‘Nino‘, null, ‘2005-09-01‘, ‘Student‘); INSERT INTO dbo.Person (PersonID, LastName, FirstName, HireDate, EnrollmentDate, Discriminator) VALUES (9, ‘Tang‘, ‘Wayne‘, null, ‘2005-09-01‘, ‘Student‘); INSERT INTO dbo.Person (PersonID, LastName, FirstName, HireDate, EnrollmentDate, Discriminator) VALUES (10, ‘Alonso‘, ‘Meredith‘, null, ‘2002-09-01‘, ‘Student‘); INSERT INTO dbo.Person (PersonID, LastName, FirstName, HireDate, EnrollmentDate, Discriminator) VALUES (11, ‘Lopez‘, ‘Sophia‘, null, ‘2004-09-01‘, ‘Student‘); INSERT INTO dbo.Person (PersonID, LastName, FirstName, HireDate, EnrollmentDate, Discriminator) VALUES (12, ‘Browning‘, ‘Meredith‘, null, ‘2000-09-01‘, ‘Student‘); INSERT INTO dbo.Person (PersonID, LastName, FirstName, HireDate, EnrollmentDate, Discriminator) VALUES (13, ‘Anand‘, ‘Arturo‘, null, ‘2003-09-01‘, ‘Student‘); INSERT INTO dbo.Person (PersonID, LastName, FirstName, HireDate, EnrollmentDate, Discriminator) VALUES (14, ‘Walker‘, ‘Alexandra‘, null, ‘2000-09-01‘, ‘Student‘); INSERT INTO dbo.Person (PersonID, LastName, FirstName, HireDate, EnrollmentDate, Discriminator) VALUES (15, ‘Powell‘, ‘Carson‘, null, ‘2004-09-01‘, ‘Student‘); INSERT INTO dbo.Person (PersonID, LastName, FirstName, HireDate, EnrollmentDate, Discriminator) VALUES (16, ‘Jai‘, ‘Damien‘, null, ‘2001-09-01‘, ‘Student‘); INSERT INTO dbo.Person (PersonID, LastName, FirstName, HireDate, EnrollmentDate, Discriminator) VALUES (17, ‘Carlson‘, ‘Robyn‘, null, ‘2005-09-01‘, ‘Student‘); INSERT INTO dbo.Person (PersonID, LastName, FirstName, HireDate, EnrollmentDate, Discriminator) VALUES (18, ‘Zheng‘, ‘Roger‘, ‘2004-02-12‘, null, ‘Instructor‘); INSERT INTO dbo.Person (PersonID, LastName, FirstName, HireDate, EnrollmentDate, Discriminator) VALUES (19, ‘Bryant‘, ‘Carson‘, null, ‘2001-09-01‘, ‘Student‘); INSERT INTO dbo.Person (PersonID, LastName, FirstName, HireDate, EnrollmentDate, Discriminator) VALUES (20, ‘Suarez‘, ‘Robyn‘, null, ‘2004-09-01‘, ‘Student‘); INSERT INTO dbo.Person (PersonID, LastName, FirstName, HireDate, EnrollmentDate, Discriminator) VALUES (21, ‘Holt‘, ‘Roger‘, null, ‘2004-09-01‘, ‘Student‘); INSERT INTO dbo.Person (PersonID, LastName, FirstName, HireDate, EnrollmentDate, Discriminator) VALUES (22, ‘Alexander‘, ‘Carson‘, null, ‘2005-09-01‘, ‘Student‘); INSERT INTO dbo.Person (PersonID, LastName, FirstName, HireDate, EnrollmentDate, Discriminator) VALUES (23, ‘Morgan‘, ‘Isaiah‘, null, ‘2001-09-01‘, ‘Student‘); INSERT INTO dbo.Person (PersonID, LastName, FirstName, HireDate, EnrollmentDate, Discriminator) VALUES (24, ‘Martin‘, ‘Randall‘, null, ‘2005-09-01‘, ‘Student‘); INSERT INTO dbo.Person (PersonID, LastName, FirstName, HireDate, EnrollmentDate, Discriminator) VALUES (25, ‘Kapoor‘, ‘Candace‘, ‘2001-01-15‘, null, ‘Instructor‘); INSERT INTO dbo.Person (PersonID, LastName, FirstName, HireDate, EnrollmentDate, Discriminator) VALUES (26, ‘Rogers‘, ‘Cody‘, null, ‘2002-09-01‘, ‘Student‘); INSERT INTO dbo.Person (PersonID, LastName, FirstName, HireDate, EnrollmentDate, Discriminator) VALUES (27, ‘Serrano‘, ‘Stacy‘, ‘1999-06-01‘, null, ‘Instructor‘); INSERT INTO dbo.Person (PersonID, LastName, FirstName, HireDate, EnrollmentDate, Discriminator) VALUES (28, ‘White‘, ‘Anthony‘, null, ‘2001-09-01‘, ‘Student‘); INSERT INTO dbo.Person (PersonID, LastName, FirstName, HireDate, EnrollmentDate, Discriminator) VALUES (29, ‘Griffin‘, ‘Rachel‘, null, ‘2004-09-01‘, ‘Student‘); INSERT INTO dbo.Person (PersonID, LastName, FirstName, HireDate, EnrollmentDate, Discriminator) VALUES (30, ‘Shan‘, ‘Alicia‘, null, ‘2003-09-01‘, ‘Student‘); INSERT INTO dbo.Person (PersonID, LastName, FirstName, HireDate, EnrollmentDate, Discriminator) VALUES (31, ‘Stewart‘, ‘Jasmine‘, ‘1997-10-12‘, null, ‘Instructor‘); INSERT INTO dbo.Person (PersonID, LastName, FirstName, HireDate, EnrollmentDate, Discriminator) VALUES (32, ‘Xu‘, ‘Kristen‘, ‘2001-7-23‘, null, ‘Instructor‘); INSERT INTO dbo.Person (PersonID, LastName, FirstName, HireDate, EnrollmentDate, Discriminator) VALUES (33, ‘Gao‘, ‘Erica‘, null, ‘2003-01-30‘, ‘Student‘); INSERT INTO dbo.Person (PersonID, LastName, FirstName, HireDate, EnrollmentDate, Discriminator) VALUES (34, ‘Van Houten‘, ‘Roger‘, ‘2000-12-07‘, null, ‘Instructor‘); GO SET IDENTITY_INSERT dbo.Person OFF GO -- 将数据插到 Department 表中。 INSERT INTO dbo.Department (DepartmentID, [Name], Budget, StartDate, Administrator) VALUES (1, ‘Engineering‘, 350000.00, ‘2007-09-01‘, 2); INSERT INTO dbo.Department (DepartmentID, [Name], Budget, StartDate, Administrator) VALUES (2, ‘English‘, 120000.00, ‘2007-09-01‘, 6); INSERT INTO dbo.Department (DepartmentID, [Name], Budget, StartDate, Administrator) VALUES (4, ‘Economics‘, 200000.00, ‘2007-09-01‘, 4); INSERT INTO dbo.Department (DepartmentID, [Name], Budget, StartDate, Administrator) VALUES (7, ‘Mathematics‘, 250000.00, ‘2007-09-01‘, 3); GO -- 将数据插到 Course 表中。 INSERT INTO dbo.Course (CourseID, Title, Credits, DepartmentID) VALUES (1050, ‘Chemistry‘, 4, 1); INSERT INTO dbo.Course (CourseID, Title, Credits, DepartmentID) VALUES (1061, ‘Physics‘, 4, 1); INSERT INTO dbo.Course (CourseID, Title, Credits, DepartmentID) VALUES (1045, ‘Calculus‘, 4, 7); INSERT INTO dbo.Course (CourseID, Title, Credits, DepartmentID) VALUES (2030, ‘Poetry‘, 2, 2); INSERT INTO dbo.Course (CourseID, Title, Credits, DepartmentID) VALUES (2021, ‘Composition‘, 3, 2); INSERT INTO dbo.Course (CourseID, Title, Credits, DepartmentID) VALUES (2042, ‘Literature‘, 4, 2); INSERT INTO dbo.Course (CourseID, Title, Credits, DepartmentID) VALUES (4022, ‘Microeconomics‘, 3, 4); INSERT INTO dbo.Course (CourseID, Title, Credits, DepartmentID) VALUES (4041, ‘Macroeconomics‘, 3, 4); INSERT INTO dbo.Course (CourseID, Title, Credits, DepartmentID) VALUES (4061, ‘Quantitative‘, 2, 4); INSERT INTO dbo.Course (CourseID, Title, Credits, DepartmentID) VALUES (3141, ‘Trigonometry‘, 4, 7); GO -- 将数据插到 OnlineCourse 表中。 INSERT INTO dbo.OnlineCourse (CourseID, URL) VALUES (2030, ‘http://www.fineartschool.net/Poetry‘); INSERT INTO dbo.OnlineCourse (CourseID, URL) VALUES (2021, ‘http://www.fineartschool.net/Composition‘); INSERT INTO dbo.OnlineCourse (CourseID, URL) VALUES (4041, ‘http://www.fineartschool.net/Macroeconomics‘); INSERT INTO dbo.OnlineCourse (CourseID, URL) VALUES (3141, ‘http://www.fineartschool.net/Trigonometry‘); -- 将数据插到 OnsiteCourse 表中。 INSERT INTO dbo.OnsiteCourse (CourseID, Location, Days, [Time]) VALUES (1050, ‘123 Smith‘, ‘MTWH‘, ‘11:30‘); INSERT INTO dbo.OnsiteCourse (CourseID, Location, Days, [Time]) VALUES (1061, ‘234 Smith‘, ‘TWHF‘, ‘13:15‘); INSERT INTO dbo.OnsiteCourse (CourseID, Location, Days, [Time]) VALUES (1045, ‘121 Smith‘,‘MWHF‘, ‘15:30‘); INSERT INTO dbo.OnsiteCourse (CourseID, Location, Days, [Time]) VALUES (4061, ‘22 Williams‘, ‘TH‘, ‘11:15‘); INSERT INTO dbo.OnsiteCourse (CourseID, Location, Days, [Time]) VALUES (2042, ‘225 Adams‘, ‘MTWH‘, ‘11:00‘); INSERT INTO dbo.OnsiteCourse (CourseID, Location, Days, [Time]) VALUES (4022, ‘23 Williams‘, ‘MWF‘, ‘9:00‘); -- 将数据插到 CourseInstructor 表中。 INSERT INTO dbo.CourseInstructor(CourseID, PersonID) VALUES (1050, 1); INSERT INTO dbo.CourseInstructor(CourseID, PersonID) VALUES (1061, 31); INSERT INTO dbo.CourseInstructor(CourseID, PersonID) VALUES (1045, 5); INSERT INTO dbo.CourseInstructor(CourseID, PersonID) VALUES (2030, 4); INSERT INTO dbo.CourseInstructor(CourseID, PersonID) VALUES (2021, 27); INSERT INTO dbo.CourseInstructor(CourseID, PersonID) VALUES (2042, 25); INSERT INTO dbo.CourseInstructor(CourseID, PersonID) VALUES (4022, 18); INSERT INTO dbo.CourseInstructor(CourseID, PersonID) VALUES (4041, 32); INSERT INTO dbo.CourseInstructor(CourseID, PersonID) VALUES (4061, 34); GO -- 将数据插到 OfficeAssignment 表中。 INSERT INTO dbo.OfficeAssignment(InstructorID, Location) VALUES (1, ‘17 Smith‘); INSERT INTO dbo.OfficeAssignment(InstructorID, Location) VALUES (4, ‘29 Adams‘); INSERT INTO dbo.OfficeAssignment(InstructorID, Location) VALUES (5, ‘37 Williams‘); INSERT INTO dbo.OfficeAssignment(InstructorID, Location) VALUES (18, ‘143 Smith‘); INSERT INTO dbo.OfficeAssignment(InstructorID, Location) VALUES (25, ‘57 Adams‘); INSERT INTO dbo.OfficeAssignment(InstructorID, Location) VALUES (27, ‘271 Williams‘); INSERT INTO dbo.OfficeAssignment(InstructorID, Location) VALUES (31, ‘131 Smith‘); INSERT INTO dbo.OfficeAssignment(InstructorID, Location) VALUES (32, ‘203 Williams‘); INSERT INTO dbo.OfficeAssignment(InstructorID, Location) VALUES (34, ‘213 Smith‘); -- 将数据插到 StudentGrade 表中。 INSERT INTO dbo.StudentGrade (CourseID, StudentID, Grade) VALUES (2021, 2, 4); INSERT INTO dbo.StudentGrade (CourseID, StudentID, Grade) VALUES (2030, 2, 3.5); INSERT INTO dbo.StudentGrade (CourseID, StudentID, Grade) VALUES (2021, 3, 3); INSERT INTO dbo.StudentGrade (CourseID, StudentID, Grade) VALUES (2030, 3, 4); INSERT INTO dbo.StudentGrade (CourseID, StudentID, Grade) VALUES (2021, 6, 2.5); INSERT INTO dbo.StudentGrade (CourseID, StudentID, Grade) VALUES (2042, 6, 3.5); INSERT INTO dbo.StudentGrade (CourseID, StudentID, Grade) VALUES (2021, 7, 3.5); INSERT INTO dbo.StudentGrade (CourseID, StudentID, Grade) VALUES (2042, 7, 4); INSERT INTO dbo.StudentGrade (CourseID, StudentID, Grade) VALUES (2021, 8, 3); INSERT INTO dbo.StudentGrade (CourseID, StudentID, Grade) VALUES (2042, 8, 3); INSERT INTO dbo.StudentGrade (CourseID, StudentID, Grade) VALUES (4041, 9, 3.5); INSERT INTO dbo.StudentGrade (CourseID, StudentID, Grade) VALUES (4041, 10, null); INSERT INTO dbo.StudentGrade (CourseID, StudentID, Grade) VALUES (4041, 11, 2.5); INSERT INTO dbo.StudentGrade (CourseID, StudentID, Grade) VALUES (4041, 12, null); INSERT INTO dbo.StudentGrade (CourseID, StudentID, Grade) VALUES (4061, 12, null); INSERT INTO dbo.StudentGrade (CourseID, StudentID, Grade) VALUES (4022, 14, 3); INSERT INTO dbo.StudentGrade (CourseID, StudentID, Grade) VALUES (4022, 13, 4); INSERT INTO dbo.StudentGrade (CourseID, StudentID, Grade) VALUES (4061, 13, 4); INSERT INTO dbo.StudentGrade (CourseID, StudentID, Grade) VALUES (4041, 14, 3); INSERT INTO dbo.StudentGrade (CourseID, StudentID, Grade) VALUES (4022, 15, 2.5); INSERT INTO dbo.StudentGrade (CourseID, StudentID, Grade) VALUES (4022, 16, 2); INSERT INTO dbo.StudentGrade (CourseID, StudentID, Grade) VALUES (4022, 17, null); INSERT INTO dbo.StudentGrade (CourseID, StudentID, Grade) VALUES (4022, 19, 3.5); INSERT INTO dbo.StudentGrade (CourseID, StudentID, Grade) VALUES (4061, 20, 4); INSERT INTO dbo.StudentGrade (CourseID, StudentID, Grade) VALUES (4061, 21, 2); INSERT INTO dbo.StudentGrade (CourseID, StudentID, Grade) VALUES (4022, 22, 3); INSERT INTO dbo.StudentGrade (CourseID, StudentID, Grade) VALUES (4041, 22, 3.5); INSERT INTO dbo.StudentGrade (CourseID, StudentID, Grade) VALUES (4061, 22, 2.5); INSERT INTO dbo.StudentGrade (CourseID, StudentID, Grade) VALUES (4022, 23, 3); INSERT INTO dbo.StudentGrade (CourseID, StudentID, Grade) VALUES (1045, 23, 1.5); INSERT INTO dbo.StudentGrade (CourseID, StudentID, Grade) VALUES (1061, 24, 4); INSERT INTO dbo.StudentGrade (CourseID, StudentID, Grade) VALUES (1061, 25, 3); INSERT INTO dbo.StudentGrade (CourseID, StudentID, Grade) VALUES (1050, 26, 3.5); INSERT INTO dbo.StudentGrade (CourseID, StudentID, Grade) VALUES (1061, 26, 3); INSERT INTO dbo.StudentGrade (CourseID, StudentID, Grade) VALUES (1061, 27, 3); INSERT INTO dbo.StudentGrade (CourseID, StudentID, Grade) VALUES (1045, 28, 2.5); INSERT INTO dbo.StudentGrade (CourseID, StudentID, Grade) VALUES (1050, 28, 3.5); INSERT INTO dbo.StudentGrade (CourseID, StudentID, Grade) VALUES (1061, 29, 4); INSERT INTO dbo.StudentGrade (CourseID, StudentID, Grade) VALUES (1050, 30, 3.5); INSERT INTO dbo.StudentGrade (CourseID, StudentID, Grade) VALUES (1061, 30, 4); GO
参照 https://msdn.microsoft.com/zh-cn/data/jj614587
实体框架词汇表
术语 |
定义 |
Code First |
使用代码创建实体框架模型。模型可以面向任何现有数据库或新数据库。 |
上下文 |
表示与数据库会话的类,用于查询和保存数据。上下文派生自 DbContext 或 ObjectContext 类。 |
约定 (Code First) |
实体框架用来根据类推断模型形状的规则。 |
Database First |
使用 EF 设计器创建面向现有数据库的实体框架模型。 |
预先加载 |
一种加载相关数据的模式,在这种模式下,对一种实体的查询会在查询过程中也加载相关实体。 |
EF 设计器 |
Visual Studio 中的可视化设计器,可用来使用方框和线创建实体框架模型。 |
Entity |
表示客户、产品和订单等应用程序数据的类或对象。 |
实体数据模型 |
描述实体以及实体间关系的模型。 |
显式加载 |
一种加载相关数据的模式,在此模式下,将通过调用 API 来调用相关对象。 |
Fluent API |
可用于配置 Code First 模型的 API。 |
外键关联 |
实体间的一种关联,其中,表示外键的属性包括在依赖实体的类中(即,Product 包含一个 CategoryId 属性)。 |
识别关系 |
一种关系,其中主体实体的主键是依赖实体的主键的一部分。在这种关系中,没有主体实体,依赖实体就不能存在。 |
独立关联 |
实体间的一种关联,其中,依赖实体的类中没有表示外键的属性(即,Product 类包含与 Category 的关系,但没有 CategoryId 属性)。实体框架将使用独立对象来跟踪这种关系。 |
延迟加载 |
一种加载相关数据的模式,在此模式下,访问导航属性时将自动加载相关对象。 |
Model First |
使用 EF 设计器创建实体框架模型,随后使用此模型来创建新数据库。 |
导航属性 |
引用其他实体的实体属性(即,Product 包含 Category 导航属性,而 Category 包含 Products 导航属性)。 |
关系逆反 |
关系的相对一端,例如,product.Category 和 category.Product。 |
自跟踪实体 |
从代码生成模板生成的实体,这种实体有助于 N 层开发。 |
每个具体类型一张表 (TPC) |
一种映射继承的方法,其中,层次结构中的每个非抽象类型都映射到数据库中单独的表。 |
每个层析结构一个表 (TPH) |
一种映射继承的方法,其中,层次结构中的所有类型都映射到数据库中的同一个表。鉴别器列用于标识每行所关联的类型。 |
每个类型一张表 (TPT) |
一种映射继承的方法,其中,层次结构中所有类型的公共属性都映射到数据库中的同一个表,但每个类型的唯一属性都映射到单独的表。 |
类型发现 |
对应该是实体框架模型的一部分的类型进行标识的过程。 |
时间: 2024-10-08 08:03:03