原文地址:http://www.cnblogs.com/luminji/archive/2011/06/10/2077696.html
?
本文目的是通過Silverlight ria service完成一次數據的讀取過程,并且在此基礎上建立測試項目。
Ria service借助于WCF和ADO.NET Entity Framework構建分布式開發框架。使用它可以快速構建自己的開發模式。
1:基礎結構
首先,創建SL APP,如下:
然后,選擇創建web:
可以,也可以不勾選enable wcf ria service,如果勾選了,在SL APP中會多幾個DLL的引用,其它沒有任何差別。如圖:
2:創建一個示例數據庫
這是一個小而輕型的數據庫,在MDSN的課程中有使用到它。如下:
show sourceview sourceprint?
| 003 | SET QUOTED_IDENTIFIER ON |
| 009 | IF EXISTS (SELECT * FROM sys.databases WHERE name = 'School') |
| 010 | ??? DROP DATABASE School; |
| 013 | -- Create the School database. |
| 014 | CREATE DATABASE School; |
| 017 | -- Specify a simple recovery model |
| 018 | -- to keep the log growth to a minimum. |
| 020 | ??? SET RECOVERY SIMPLE; |
| 026 | -- Create the Department table. |
| 027 | IF NOT EXISTS (SELECT * FROM sys.objects |
| 028 | ??????? WHERE object_id = OBJECT_ID(N'[dbo].[Department]') |
| 029 | ??????? AND type in (N'U')) |
| 031 | CREATE TABLE [dbo].[Department]( |
| 032 | ??? [DepartmentID] [int] NOT NULL, |
| 033 | ??? [Name] [nvarchar](50) NOT NULL, |
| 034 | ??? [Budget] [money] NOT NULL, |
| 035 | ??? [StartDate] [datetime] NOT NULL, |
| 036 | ??? [Administrator] [int] NULL, |
| 037 | CONSTRAINT [PK_Department] PRIMARY KEY CLUSTERED |
| 039 | ??? [DepartmentID] ASC |
| 040 | )WITH (IGNORE_DUP_KEY = OFF) ON [PRIMARY] |
| 045 | -- Create the Person table. |
| 046 | IF NOT EXISTS (SELECT * FROM sys.objects |
| 047 | ??????? WHERE object_id = OBJECT_ID(N'[dbo].[Person]') |
| 048 | ??????? AND type in (N'U')) |
| 050 | CREATE TABLE [dbo].[Person]( |
| 051 | ??? [PersonID] [int] IDENTITY(1,1) NOT NULL, |
| 052 | ??? [LastName] [nvarchar](50) NOT NULL, |
| 053 | ??? [FirstName] [nvarchar](50) NOT NULL, |
| 054 | ??? [HireDate] [datetime] NULL, |
| 055 | ??? [EnrollmentDate] [datetime] NULL, |
| 056 | CONSTRAINT [PK_School.Student] PRIMARY KEY CLUSTERED |
| 059 | )WITH (IGNORE_DUP_KEY = OFF) ON [PRIMARY] |
| 064 | -- Create the OnsiteCourse table. |
| 065 | IF NOT EXISTS (SELECT * FROM sys.objects |
| 066 | ??????? WHERE object_id = OBJECT_ID(N'[dbo].[OnsiteCourse]') |
| 067 | ??????? AND type in (N'U')) |
| 069 | CREATE TABLE [dbo].[OnsiteCourse]( |
| 070 | ??? [CourseID] [int] NOT NULL, |
| 071 | ??? [Location] [nvarchar](50) NOT NULL, |
| 072 | ??? [Days] [nvarchar](50) NOT NULL, |
| 073 | ??? [Time] [smalldatetime] NOT NULL, |
| 074 | CONSTRAINT [PK_OnsiteCourse] PRIMARY KEY CLUSTERED |
| 077 | )WITH (IGNORE_DUP_KEY = OFF) ON [PRIMARY] |
| 082 | -- Create the OnlineCourse table. |
| 083 | IF NOT EXISTS (SELECT * FROM sys.objects |
| 084 | ??????? WHERE object_id = OBJECT_ID(N'[dbo].[OnlineCourse]') |
| 085 | ??????? AND type in (N'U')) |
| 087 | CREATE TABLE [dbo].[OnlineCourse]( |
| 088 | ??? [CourseID] [int] NOT NULL, |
| 089 | ??? [URL] [nvarchar](100) NOT NULL, |
| 090 | CONSTRAINT [PK_OnlineCourse] PRIMARY KEY CLUSTERED |
| 093 | )WITH (IGNORE_DUP_KEY = OFF) ON [PRIMARY] |
| 098 | --Create the StudentGrade table. |
| 099 | IF NOT EXISTS (SELECT * FROM sys.objects |
| 100 | ??????? WHERE object_id = OBJECT_ID(N'[dbo].[StudentGrade]') |
| 101 | ??????? AND type in (N'U')) |
| 103 | CREATE TABLE [dbo].[StudentGrade]( |
| 104 | ??? [EnrollmentID] [int] IDENTITY(1,1) NOT NULL, |
| 105 | ??? [CourseID] [int] NOT NULL, |
| 106 | ??? [StudentID] [int] NOT NULL, |
| 107 | ??? [Grade] [decimal](3, 2) NULL, |
| 108 | CONSTRAINT [PK_StudentGrade] PRIMARY KEY CLUSTERED |
| 110 | ??? [EnrollmentID] ASC |
| 111 | )WITH (IGNORE_DUP_KEY = OFF) ON [PRIMARY] |
| 116 | -- Create the CourseInstructor table. |
| 117 | IF NOT EXISTS (SELECT * FROM sys.objects |
| 118 | ??????? WHERE object_id = OBJECT_ID(N'[dbo].[CourseInstructor]') |
| 119 | ??????? AND type in (N'U')) |
| 121 | CREATE TABLE [dbo].[CourseInstructor]( |
| 122 | ??? [CourseID] [int] NOT NULL, |
| 123 | ??? [PersonID] [int] NOT NULL, |
| 124 | CONSTRAINT [PK_CourseInstructor] PRIMARY KEY CLUSTERED |
| 128 | )WITH (IGNORE_DUP_KEY = OFF) ON [PRIMARY] |
| 133 | -- Create the Course table. |
| 134 | IF NOT EXISTS (SELECT * FROM sys.objects |
| 135 | ??????? WHERE object_id = OBJECT_ID(N'[dbo].[Course]') |
| 136 | ??????? AND type in (N'U')) |
| 138 | CREATE TABLE [dbo].[Course]( |
| 139 | ??? [CourseID] [int] NOT NULL, |
| 140 | ??? [Title] [nvarchar](100) NOT NULL, |
| 141 | ??? [Credits] [int] NOT NULL, |
| 142 | ??? [DepartmentID] [int] NOT NULL, |
| 143 | CONSTRAINT [PK_School.Course] PRIMARY KEY CLUSTERED |
| 146 | )WITH (IGNORE_DUP_KEY = OFF) ON [PRIMARY] |
| 151 | -- Create the OfficeAssignment table. |
| 152 | IF NOT EXISTS (SELECT * FROM sys.objects |
| 153 | ??????? WHERE object_id = OBJECT_ID(N'[dbo].[OfficeAssignment]') |
| 154 | ??????? AND type in (N'U')) |
| 156 | CREATE TABLE [dbo].[OfficeAssignment]( |
| 157 | ??? [InstructorID] [int] NOT NULL, |
| 158 | ??? [Location] [nvarchar](50) NOT NULL, |
| 159 | ??? 1742015336 [timestamp] NOT NULL, |
| 160 | CONSTRAINT [PK_OfficeAssignment] PRIMARY KEY CLUSTERED |
| 162 | ??? [InstructorID] ASC |
| 163 | )WITH (IGNORE_DUP_KEY = OFF) ON [PRIMARY] |
| 168 | -- Define the relationship between OnsiteCourse and Course. |
| 169 | IF NOT EXISTS (SELECT * FROM sys.foreign_keys |
| 170 | ?????? WHERE object_id = OBJECT_ID(N'[dbo].[FK_OnsiteCourse_Course]') |
| 171 | ?????? AND parent_object_id = OBJECT_ID(N'[dbo].[OnsiteCourse]')) |
| 172 | ALTER TABLE [dbo].[OnsiteCourse]? WITH CHECK ADD |
| 173 | ?????? CONSTRAINT [FK_OnsiteCourse_Course] FOREIGN KEY([CourseID]) |
| 174 | REFERENCES [dbo].[Course] ([CourseID]) |
| 176 | ALTER TABLE [dbo].[OnsiteCourse] CHECK |
| 177 | ?????? CONSTRAINT [FK_OnsiteCourse_Course] |
| 180 | -- Define the relationship between OnlineCourse and Course. |
| 181 | IF NOT EXISTS (SELECT * FROM sys.foreign_keys |
| 182 | ?????? WHERE object_id = OBJECT_ID(N'[dbo].[FK_OnlineCourse_Course]') |
| 183 | ?????? AND parent_object_id = OBJECT_ID(N'[dbo].[OnlineCourse]')) |
| 184 | ALTER TABLE [dbo].[OnlineCourse]? WITH CHECK ADD |
| 185 | ?????? CONSTRAINT [FK_OnlineCourse_Course] FOREIGN KEY([CourseID]) |
| 186 | REFERENCES [dbo].[Course] ([CourseID]) |
| 188 | ALTER TABLE [dbo].[OnlineCourse] CHECK |
| 189 | ?????? CONSTRAINT [FK_OnlineCourse_Course] |
| 192 | -- Define the relationship between StudentGrade and Course. |
| 193 | IF NOT EXISTS (SELECT * FROM sys.foreign_keys |
| 194 | ?????? WHERE object_id = OBJECT_ID(N'[dbo].[FK_StudentGrade_Course]') |
| 195 | ?????? AND parent_object_id = OBJECT_ID(N'[dbo].[StudentGrade]')) |
| 196 | ALTER TABLE [dbo].[StudentGrade]? WITH CHECK ADD |
| 197 | ?????? CONSTRAINT [FK_StudentGrade_Course] FOREIGN KEY([CourseID]) |
| 198 | REFERENCES [dbo].[Course] ([CourseID]) |
| 200 | ALTER TABLE [dbo].[StudentGrade] CHECK |
| 201 | ?????? CONSTRAINT [FK_StudentGrade_Course] |
| 204 | --Define the relationship between StudentGrade and Student. |
| 205 | IF NOT EXISTS (SELECT * FROM sys.foreign_keys |
| 206 | ?????? WHERE object_id = OBJECT_ID(N'[dbo].[FK_StudentGrade_Student]') |
| 207 | ?????? AND parent_object_id = OBJECT_ID(N'[dbo].[StudentGrade]')) |
| 208 | ALTER TABLE [dbo].[StudentGrade]? WITH CHECK ADD |
| 209 | ?????? CONSTRAINT [FK_StudentGrade_Student] FOREIGN KEY([StudentID]) |
| 210 | REFERENCES [dbo].[Person] ([PersonID]) |
| 212 | ALTER TABLE [dbo].[StudentGrade] CHECK |
| 213 | ?????? CONSTRAINT [FK_StudentGrade_Student] |
| 216 | -- Define the relationship between CourseInstructor and Course. |
| 217 | IF NOT EXISTS (SELECT * FROM sys.foreign_keys |
| 218 | ?? WHERE object_id = OBJECT_ID(N'[dbo].[FK_CourseInstructor_Course]') |
| 219 | ?? AND parent_object_id = OBJECT_ID(N'[dbo].[CourseInstructor]')) |
| 220 | ALTER TABLE [dbo].[CourseInstructor]? WITH CHECK ADD |
| 221 | ?? CONSTRAINT [FK_CourseInstructor_Course] FOREIGN KEY([CourseID]) |
| 222 | REFERENCES [dbo].[Course] ([CourseID]) |
| 224 | ALTER TABLE [dbo].[CourseInstructor] CHECK |
| 225 | ?? CONSTRAINT [FK_CourseInstructor_Course] |
| 228 | -- Define the relationship between CourseInstructor and Person. |
| 229 | IF NOT EXISTS (SELECT * FROM sys.foreign_keys |
| 230 | ?? WHERE object_id = OBJECT_ID(N'[dbo].[FK_CourseInstructor_Person]') |
| 231 | ?? AND parent_object_id = OBJECT_ID(N'[dbo].[CourseInstructor]')) |
| 232 | ALTER TABLE [dbo].[CourseInstructor]? WITH CHECK ADD |
| 233 | ?? CONSTRAINT [FK_CourseInstructor_Person] FOREIGN KEY([PersonID]) |
| 234 | REFERENCES [dbo].[Person] ([PersonID]) |
| 236 | ALTER TABLE [dbo].[CourseInstructor] CHECK |
| 237 | ?? CONSTRAINT [FK_CourseInstructor_Person] |
| 240 | -- Define the relationship between Course and Department. |
| 241 | IF NOT EXISTS (SELECT * FROM sys.foreign_keys |
| 242 | ?????? WHERE object_id = OBJECT_ID(N'[dbo].[FK_Course_Department]') |
| 243 | ?????? AND parent_object_id = OBJECT_ID(N'[dbo].[Course]')) |
| 244 | ALTER TABLE [dbo].[Course]? WITH CHECK ADD |
| 245 | ?????? CONSTRAINT [FK_Course_Department] FOREIGN KEY([DepartmentID]) |
| 246 | REFERENCES [dbo].[Department] ([DepartmentID]) |
| 248 | ALTER TABLE [dbo].[Course] CHECK CONSTRAINT [FK_Course_Department] |
| 251 | --Define the relationship between OfficeAssignment and Person. |
| 252 | IF NOT EXISTS (SELECT * FROM sys.foreign_keys |
| 253 | ?? WHERE object_id = OBJECT_ID(N'[dbo].[FK_OfficeAssignment_Person]') |
| 254 | ?? AND parent_object_id = OBJECT_ID(N'[dbo].[OfficeAssignment]')) |
| 255 | ALTER TABLE [dbo].[OfficeAssignment]? WITH CHECK ADD |
| 256 | ?? CONSTRAINT [FK_OfficeAssignment_Person] FOREIGN KEY([InstructorID]) |
| 257 | REFERENCES [dbo].[Person] ([PersonID]) |
| 259 | ALTER TABLE [dbo].[OfficeAssignment] CHECK |
| 260 | ?? CONSTRAINT [FK_OfficeAssignment_Person] |
| 263 | -- Create InsertOfficeAssignment stored procedure. |
| 264 | IF NOT EXISTS (SELECT * FROM sys.objects |
| 265 | ??????? WHERE object_id = OBJECT_ID(N'[dbo].[InsertOfficeAssignment]') |
| 266 | ??????? AND type in (N'P', N'PC')) |
| 268 | EXEC dbo.sp_executesql @statement = N' |
| 269 | CREATE PROCEDURE [dbo].[InsertOfficeAssignment] |
| 270 | ??????? @InstructorID int, |
| 271 | ??????? @Location nvarchar(50) |
| 273 | ??????? INSERT INTO dbo.OfficeAssignment (InstructorID, Location) |
| 274 | ??????? VALUES (@InstructorID, @Location); |
| 275 | ??????? IF @@ROWCOUNT > 0 |
| 277 | ??????????? SELECT 1742015336 FROM OfficeAssignment |
| 278 | ??????????????? WHERE InstructorID=@InstructorID; |
| 284 | --Create the UpdateOfficeAssignment stored procedure. |
| 285 | IF NOT EXISTS (SELECT * FROM sys.objects |
| 286 | ??????? WHERE object_id = OBJECT_ID(N'[dbo].[UpdateOfficeAssignment]') |
| 287 | ??????? AND type in (N'P', N'PC')) |
| 289 | EXEC dbo.sp_executesql @statement = N' |
| 290 | CREATE PROCEDURE [dbo].[UpdateOfficeAssignment] |
| 291 | ??????? @InstructorID int, |
| 292 | ??????? @Location nvarchar(50), |
| 293 | ??????? @OrigTimestamp timestamp |
| 295 | ??????? UPDATE OfficeAssignment SET Location=@Location |
| 296 | ??????? WHERE InstructorID=@InstructorID AND 1742015336=@OrigTimestamp; |
| 297 | ??????? IF @@ROWCOUNT > 0 |
| 299 | ??????????? SELECT 1742015336 FROM OfficeAssignment |
| 300 | ??????????????? WHERE InstructorID=@InstructorID; |
| 306 | -- Create the DeleteOfficeAssignment stored procedure. |
| 307 | IF NOT EXISTS (SELECT * FROM sys.objects |
| 308 | ??????? WHERE object_id = OBJECT_ID(N'[dbo].[DeleteOfficeAssignment]') |
| 309 | ??????? AND type in (N'P', N'PC')) |
| 311 | EXEC dbo.sp_executesql @statement = N' |
| 312 | CREATE PROCEDURE [dbo].[DeleteOfficeAssignment] |
| 313 | ??????? @InstructorID int |
| 315 | ??????? DELETE FROM OfficeAssignment |
| 316 | ??????? WHERE InstructorID=@InstructorID; |
| 321 | -- Create the DeletePerson stored procedure. |
| 322 | IF NOT EXISTS (SELECT * FROM sys.objects |
| 323 | ??????? WHERE object_id = OBJECT_ID(N'[dbo].[DeletePerson]') |
| 324 | ??????? AND type in (N'P', N'PC')) |
| 326 | EXEC dbo.sp_executesql @statement = N' |
| 327 | CREATE PROCEDURE [dbo].[DeletePerson] |
| 330 | ??????? DELETE FROM Person WHERE PersonID = @PersonID; |
| 335 | -- Create the UpdatePerson stored procedure. |
| 336 | IF NOT EXISTS (SELECT * FROM sys.objects |
| 337 | ??????? WHERE object_id = OBJECT_ID(N'[dbo].[UpdatePerson]') |
| 338 | ??????? AND type in (N'P', N'PC')) |
| 340 | EXEC dbo.sp_executesql @statement = N' |
| 341 | CREATE PROCEDURE [dbo].[UpdatePerson] |
| 342 | ??????? @PersonID int, |
| 343 | ??????? @LastName nvarchar(50), |
| 344 | ??????? @FirstName nvarchar(50), |
| 345 | ??????? @HireDate datetime, |
| 346 | ??????? @EnrollmentDate datetime |
| 348 | ??????? UPDATE Person SET LastName=@LastName, |
| 349 | ??????????????? FirstName=@FirstName, |
| 350 | ??????????????? HireDate=@HireDate, |
| 351 | ??????????????? EnrollmentDate=@EnrollmentDate |
| 352 | ??????? WHERE PersonID=@PersonID; |
| 357 | -- Create the InsertPerson stored procedure. |
| 358 | IF NOT EXISTS (SELECT * FROM sys.objects |
| 359 | ??????? WHERE object_id = OBJECT_ID(N'[dbo].[InsertPerson]') |
| 360 | ??????? AND type in (N'P', N'PC')) |
| 362 | EXEC dbo.sp_executesql @statement = N' |
| 363 | CREATE PROCEDURE [dbo].[InsertPerson] |
| 364 | ??????? @LastName nvarchar(50), |
| 365 | ??????? @FirstName nvarchar(50), |
| 366 | ??????? @HireDate datetime, |
| 367 | ??????? @EnrollmentDate datetime |
| 369 | ??????? INSERT INTO dbo.Person (LastName, |
| 370 | ??????????????????? FirstName, |
| 371 | ??????????????????? HireDate, |
| 372 | ??????????????????? EnrollmentDate) |
| 373 | ??????? VALUES (@LastName, |
| 374 | ??????????? @FirstName, |
| 375 | ??????????? @HireDate, |
| 376 | ??????????? @EnrollmentDate); |
| 377 | ??????? SELECT SCOPE_IDENTITY() as NewPersonID; |
| 382 | -- Create GetStudentGrades stored procedure. |
| 383 | IF NOT EXISTS (SELECT * FROM sys.objects |
| 384 | ??????????? WHERE object_id = OBJECT_ID(N'[dbo].[GetStudentGrades]') |
| 385 | ??????????? AND type in (N'P', N'PC')) |
| 387 | EXEC dbo.sp_executesql @statement = N' |
| 388 | CREATE PROCEDURE [dbo].[GetStudentGrades] |
| 389 | ??????????? @StudentID int |
| 391 | ??????????? SELECT EnrollmentID, Grade, CourseID, StudentID FROM dbo.StudentGrade |
| 392 | ??????????? WHERE StudentID = @StudentID |
| 397 | -- Create GetDepartmentName stored procedure. |
| 398 | IF NOT EXISTS (SELECT * FROM sys.objects |
| 399 | ??????????? WHERE object_id = OBJECT_ID(N'[dbo].[GetDepartmentName]') |
| 400 | ??????????? AND type in (N'P', N'PC')) |
| 402 | EXEC dbo.sp_executesql @statement = N' |
| 403 | CREATE PROCEDURE [dbo].[GetDepartmentName] |
| 405 | ????? @Name nvarchar(50) OUTPUT |
| 407 | ????? SELECT @Name = Name FROM Department |
| 408 | ????? WHERE DepartmentID = @ID |
| 413 | -- Insert data into the Person table. |
| 416 | SET IDENTITY_INSERT dbo.Person ON |
| 418 | INSERT INTO dbo.Person (PersonID, LastName, FirstName, HireDate, EnrollmentDate) |
| 419 | VALUES (1, 'Abercrombie', 'Kim', '1995-03-11', null); |
| 420 | INSERT INTO dbo.Person (PersonID, LastName, FirstName, HireDate, EnrollmentDate) |
| 421 | VALUES (2, 'Barzdukas', 'Gytis', null, '2005-09-01'); |
| 422 | INSERT INTO dbo.Person (PersonID, LastName, FirstName, HireDate, EnrollmentDate) |
| 423 | VALUES (3, 'Justice', 'Peggy', null, '2001-09-01'); |
| 424 | INSERT INTO dbo.Person (PersonID, LastName, FirstName, HireDate, EnrollmentDate) |
| 425 | VALUES (4, 'Fakhouri', 'Fadi', '2002-08-06', null); |
| 426 | INSERT INTO dbo.Person (PersonID, LastName, FirstName, HireDate, EnrollmentDate) |
| 427 | VALUES (5, 'Harui', 'Roger', '1998-07-01', null); |
| 428 | INSERT INTO dbo.Person (PersonID, LastName, FirstName, HireDate, EnrollmentDate) |
| 429 | VALUES (6, 'Li', 'Yan', null, '2002-09-01'); |
| 430 | INSERT INTO dbo.Person (PersonID, LastName, FirstName, HireDate, EnrollmentDate) |
| 431 | VALUES (7, 'Norman', 'Laura', null, '2003-09-01'); |
| 432 | INSERT INTO dbo.Person (PersonID, LastName, FirstName, HireDate, EnrollmentDate) |
| 433 | VALUES (8, 'Olivotto', 'Nino', null, '2005-09-01'); |
| 434 | INSERT INTO dbo.Person (PersonID, LastName, FirstName, HireDate, EnrollmentDate) |
| 435 | VALUES (9, 'Tang', 'Wayne', null, '2005-09-01'); |
| 436 | INSERT INTO dbo.Person (PersonID, LastName, FirstName, HireDate, EnrollmentDate) |
| 437 | VALUES (10, 'Alonso', 'Meredith', null, '2002-09-01'); |
| 438 | INSERT INTO dbo.Person (PersonID, LastName, FirstName, HireDate, EnrollmentDate) |
| 439 | VALUES (11, 'Lopez', 'Sophia', null, '2004-09-01'); |
| 440 | INSERT INTO dbo.Person (PersonID, LastName, FirstName, HireDate, EnrollmentDate) |
| 441 | VALUES (12, 'Browning', 'Meredith', null, '2000-09-01'); |
| 442 | INSERT INTO dbo.Person (PersonID, LastName, FirstName, HireDate, EnrollmentDate) |
| 443 | VALUES (13, 'Anand', 'Arturo', null, '2003-09-01'); |
| 444 | INSERT INTO dbo.Person (PersonID, LastName, FirstName, HireDate, EnrollmentDate) |
| 445 | VALUES (14, 'Walker', 'Alexandra', null, '2000-09-01'); |
| 446 | INSERT INTO dbo.Person (PersonID, LastName, FirstName, HireDate, EnrollmentDate) |
| 447 | VALUES (15, 'Powell', 'Carson', null, '2004-09-01'); |
| 448 | INSERT INTO dbo.Person (PersonID, LastName, FirstName, HireDate, EnrollmentDate) |
| 449 | VALUES (16, 'Jai', 'Damien', null, '2001-09-01'); |
| 450 | INSERT INTO dbo.Person (PersonID, LastName, FirstName, HireDate, EnrollmentDate) |
| 451 | VALUES (17, 'Carlson', 'Robyn', null, '2005-09-01'); |
| 452 | INSERT INTO dbo.Person (PersonID, LastName, FirstName, HireDate, EnrollmentDate) |
| 453 | VALUES (18, 'Zheng', 'Roger', '2004-02-12', null); |
| 454 | INSERT INTO dbo.Person (PersonID, LastName, FirstName, HireDate, EnrollmentDate) |
| 455 | VALUES (19, 'Bryant', 'Carson', null, '2001-09-01'); |
| 456 | INSERT INTO dbo.Person (PersonID, LastName, FirstName, HireDate, EnrollmentDate) |
| 457 | VALUES (20, 'Suarez', 'Robyn', null, '2004-09-01'); |
| 458 | INSERT INTO dbo.Person (PersonID, LastName, FirstName, HireDate, EnrollmentDate) |
| 459 | VALUES (21, 'Holt', 'Roger', null, '2004-09-01'); |
| 460 | INSERT INTO dbo.Person (PersonID, LastName, FirstName, HireDate, EnrollmentDate) |
| 461 | VALUES (22, 'Alexander', 'Carson', null, '2005-09-01'); |
| 462 | INSERT INTO dbo.Person (PersonID, LastName, FirstName, HireDate, EnrollmentDate) |
| 463 | VALUES (23, 'Morgan', 'Isaiah', null, '2001-09-01'); |
| 464 | INSERT INTO dbo.Person (PersonID, LastName, FirstName, HireDate, EnrollmentDate) |
| 465 | VALUES (24, 'Martin', 'Randall', null, '2005-09-01'); |
| 466 | INSERT INTO dbo.Person (PersonID, LastName, FirstName, HireDate, EnrollmentDate) |
| 467 | VALUES (25, 'Kapoor', 'Candace', '2001-01-15', null); |
| 468 | INSERT INTO dbo.Person (PersonID, LastName, FirstName, HireDate, EnrollmentDate) |
| 469 | VALUES (26, 'Rogers', 'Cody', null, '2002-09-01'); |
| 470 | INSERT INTO dbo.Person (PersonID, LastName, FirstName, HireDate, EnrollmentDate) |
| 471 | VALUES (27, 'Serrano', 'Stacy', '1999-06-01', null); |
| 472 | INSERT INTO dbo.Person (PersonID, LastName, FirstName, HireDate, EnrollmentDate) |
| 473 | VALUES (28, 'White', 'Anthony', null, '2001-09-01'); |
| 474 | INSERT INTO dbo.Person (PersonID, LastName, FirstName, HireDate, EnrollmentDate) |
| 475 | VALUES (29, 'Griffin', 'Rachel', null, '2004-09-01'); |
| 476 | INSERT INTO dbo.Person (PersonID, LastName, FirstName, HireDate, EnrollmentDate) |
| 477 | VALUES (30, 'Shan', 'Alicia', null, '2003-09-01'); |
| 478 | INSERT INTO dbo.Person (PersonID, LastName, FirstName, HireDate, EnrollmentDate) |
| 479 | VALUES (31, 'Stewart', 'Jasmine', '1997-10-12', null); |
| 480 | INSERT INTO dbo.Person (PersonID, LastName, FirstName, HireDate, EnrollmentDate) |
| 481 | VALUES (32, 'Xu', 'Kristen', '2001-7-23', null); |
| 482 | INSERT INTO dbo.Person (PersonID, LastName, FirstName, HireDate, EnrollmentDate) |
| 483 | VALUES (33, 'Gao', 'Erica', null, '2003-01-30'); |
| 484 | INSERT INTO dbo.Person (PersonID, LastName, FirstName, HireDate, EnrollmentDate) |
| 485 | VALUES (34, 'Van Houten', 'Roger', '2000-12-07', null); |
| 487 | SET IDENTITY_INSERT dbo.Person OFF |
| 490 | -- Insert data into the Department table. |
| 491 | INSERT INTO dbo.Department (DepartmentID, [Name], Budget, StartDate, Administrator) |
| 492 | VALUES (1, 'Engineering', 350000.00, '2007-09-01', 2); |
| 493 | INSERT INTO dbo.Department (DepartmentID, [Name], Budget, StartDate, Administrator) |
| 494 | VALUES (2, 'English', 120000.00, '2007-09-01', 6); |
| 495 | INSERT INTO dbo.Department (DepartmentID, [Name], Budget, StartDate, Administrator) |
| 496 | VALUES (4, 'Economics', 200000.00, '2007-09-01', 4); |
| 497 | INSERT INTO dbo.Department (DepartmentID, [Name], Budget, StartDate, Administrator) |
| 498 | VALUES (7, 'Mathematics', 250000.00, '2007-09-01', 3); |
| 502 | -- Insert data into the Course table. |
| 503 | INSERT INTO dbo.Course (CourseID, Title, Credits, DepartmentID) |
| 504 | VALUES (1050, 'Chemistry', 4, 1); |
| 505 | INSERT INTO dbo.Course (CourseID, Title, Credits, DepartmentID) |
| 506 | VALUES (1061, 'Physics', 4, 1); |
| 507 | INSERT INTO dbo.Course (CourseID, Title, Credits, DepartmentID) |
| 508 | VALUES (1045, 'Calculus', 4, 7); |
| 509 | INSERT INTO dbo.Course (CourseID, Title, Credits, DepartmentID) |
| 510 | VALUES (2030, 'Poetry', 2, 2); |
| 511 | INSERT INTO dbo.Course (CourseID, Title, Credits, DepartmentID) |
| 512 | VALUES (2021, 'Composition', 3, 2); |
| 513 | INSERT INTO dbo.Course (CourseID, Title, Credits, DepartmentID) |
| 514 | VALUES (2042, 'Literature', 4, 2); |
| 515 | INSERT INTO dbo.Course (CourseID, Title, Credits, DepartmentID) |
| 516 | VALUES (4022, 'Microeconomics', 3, 4); |
| 517 | INSERT INTO dbo.Course (CourseID, Title, Credits, DepartmentID) |
| 518 | VALUES (4041, 'Macroeconomics', 3, 4); |
| 519 | INSERT INTO dbo.Course (CourseID, Title, Credits, DepartmentID) |
| 520 | VALUES (4061, 'Quantitative', 2, 4); |
| 521 | INSERT INTO dbo.Course (CourseID, Title, Credits, DepartmentID) |
| 522 | VALUES (3141, 'Trigonometry', 4, 7); |
| 525 | -- Insert data into the OnlineCourse table. |
| 526 | INSERT INTO dbo.OnlineCourse (CourseID, URL) |
| 527 | VALUES (2030, 'http://www.fineartschool.net/Poetry'); |
| 528 | INSERT INTO dbo.OnlineCourse (CourseID, URL) |
| 529 | VALUES (2021, 'http://www.fineartschool.net/Composition'); |
| 530 | INSERT INTO dbo.OnlineCourse (CourseID, URL) |
| 531 | VALUES (4041, 'http://www.fineartschool.net/Macroeconomics'); |
| 532 | INSERT INTO dbo.OnlineCourse (CourseID, URL) |
| 533 | VALUES (3141, 'http://www.fineartschool.net/Trigonometry'); |
| 535 | --Insert data into OnsiteCourse table. |
| 536 | INSERT INTO dbo.OnsiteCourse (CourseID, Location, Days, [Time]) |
| 537 | VALUES (1050, '123 Smith', 'MTWH', '11:30'); |
| 538 | INSERT INTO dbo.OnsiteCourse (CourseID, Location, Days, [Time]) |
| 539 | VALUES (1061, '234 Smith', 'TWHF', '13:15'); |
| 540 | INSERT INTO dbo.OnsiteCourse (CourseID, Location, Days, [Time]) |
| 541 | VALUES (1045, '121 Smith','MWHF', '15:30'); |
| 542 | INSERT INTO dbo.OnsiteCourse (CourseID, Location, Days, [Time]) |
| 543 | VALUES (4061, '22 Williams', 'TH', '11:15'); |
| 544 | INSERT INTO dbo.OnsiteCourse (CourseID, Location, Days, [Time]) |
| 545 | VALUES (2042, '225 Adams', 'MTWH', '11:00'); |
| 546 | INSERT INTO dbo.OnsiteCourse (CourseID, Location, Days, [Time]) |
| 547 | VALUES (4022, '23 Williams', 'MWF', '9:00'); |
| 549 | -- Insert data into the CourseInstructor table. |
| 550 | INSERT INTO dbo.CourseInstructor(CourseID, PersonID) |
| 552 | INSERT INTO dbo.CourseInstructor(CourseID, PersonID) |
| 554 | INSERT INTO dbo.CourseInstructor(CourseID, PersonID) |
| 556 | INSERT INTO dbo.CourseInstructor(CourseID, PersonID) |
| 558 | INSERT INTO dbo.CourseInstructor(CourseID, PersonID) |
| 560 | INSERT INTO dbo.CourseInstructor(CourseID, PersonID) |
| 562 | INSERT INTO dbo.CourseInstructor(CourseID, PersonID) |
| 564 | INSERT INTO dbo.CourseInstructor(CourseID, PersonID) |
| 566 | INSERT INTO dbo.CourseInstructor(CourseID, PersonID) |
| 570 | --Insert data into the OfficeAssignment table. |
| 571 | INSERT INTO dbo.OfficeAssignment(InstructorID, Location) |
| 572 | VALUES (1, '17 Smith'); |
| 573 | INSERT INTO dbo.OfficeAssignment(InstructorID, Location) |
| 574 | VALUES (4, '29 Adams'); |
| 575 | INSERT INTO dbo.OfficeAssignment(InstructorID, Location) |
| 576 | VALUES (5, '37 Williams'); |
| 577 | INSERT INTO dbo.OfficeAssignment(InstructorID, Location) |
| 578 | VALUES (18, '143 Smith'); |
| 579 | INSERT INTO dbo.OfficeAssignment(InstructorID, Location) |
| 580 | VALUES (25, '57 Adams'); |
| 581 | INSERT INTO dbo.OfficeAssignment(InstructorID, Location) |
| 582 | VALUES (27, '271 Williams'); |
| 583 | INSERT INTO dbo.OfficeAssignment(InstructorID, Location) |
| 584 | VALUES (31, '131 Smith'); |
| 585 | INSERT INTO dbo.OfficeAssignment(InstructorID, Location) |
| 586 | VALUES (32, '203 Williams'); |
| 587 | INSERT INTO dbo.OfficeAssignment(InstructorID, Location) |
| 588 | VALUES (34, '213 Smith'); |
| 590 | -- Insert data into the StudentGrade table. |
| 591 | INSERT INTO dbo.StudentGrade (CourseID, StudentID, Grade) |
| 593 | INSERT INTO dbo.StudentGrade (CourseID, StudentID, Grade) |
| 594 | VALUES (2030, 2, 3.5); |
| 595 | INSERT INTO dbo.StudentGrade (CourseID, StudentID, Grade) |
| 597 | INSERT INTO dbo.StudentGrade (CourseID, StudentID, Grade) |
| 599 | INSERT INTO dbo.StudentGrade (CourseID, StudentID, Grade) |
| 600 | VALUES (2021, 6, 2.5); |
| 601 | INSERT INTO dbo.StudentGrade (CourseID, StudentID, Grade) |
| 602 | VALUES (2042, 6, 3.5); |
| 603 | INSERT INTO dbo.StudentGrade (CourseID, StudentID, Grade) |
| 604 | VALUES (2021, 7, 3.5); |
| 605 | INSERT INTO dbo.StudentGrade (CourseID, StudentID, Grade) |
| 607 | INSERT INTO dbo.StudentGrade (CourseID, StudentID, Grade) |
| 609 | INSERT INTO dbo.StudentGrade (CourseID, StudentID, Grade) |
| 611 | INSERT INTO dbo.StudentGrade (CourseID, StudentID, Grade) |
| 612 | VALUES (4041, 9, 3.5); |
| 613 | INSERT INTO dbo.StudentGrade (CourseID, StudentID, Grade) |
| 614 | VALUES (4041, 10, null); |
| 615 | INSERT INTO dbo.StudentGrade (CourseID, StudentID, Grade) |
| 616 | VALUES (4041, 11, 2.5); |
| 617 | INSERT INTO dbo.StudentGrade (CourseID, StudentID, Grade) |
| 618 | VALUES (4041, 12, null); |
| 619 | INSERT INTO dbo.StudentGrade (CourseID, StudentID, Grade) |
| 620 | VALUES (4061, 12, null); |
| 621 | INSERT INTO dbo.StudentGrade (CourseID, StudentID, Grade) |
| 623 | INSERT INTO dbo.StudentGrade (CourseID, StudentID, Grade) |
| 625 | INSERT INTO dbo.StudentGrade (CourseID, StudentID, Grade) |
| 627 | INSERT INTO dbo.StudentGrade (CourseID, StudentID, Grade) |
| 629 | INSERT INTO dbo.StudentGrade (CourseID, StudentID, Grade) |
| 630 | VALUES (4022, 15, 2.5); |
| 631 | INSERT INTO dbo.StudentGrade (CourseID, StudentID, Grade) |
| 633 | INSERT INTO dbo.StudentGrade (CourseID, StudentID, Grade) |
| 634 | VALUES (4022, 17, null); |
| 635 | INSERT INTO dbo.StudentGrade (CourseID, StudentID, Grade) |
| 636 | VALUES (4022, 19, 3.5); |
| 637 | INSERT INTO dbo.StudentGrade (CourseID, StudentID, Grade) |
| 639 | INSERT INTO dbo.StudentGrade (CourseID, StudentID, Grade) |
| 641 | INSERT INTO dbo.StudentGrade (CourseID, StudentID, Grade) |
| 643 | INSERT INTO dbo.StudentGrade (CourseID, StudentID, Grade) |
| 644 | VALUES (4041, 22, 3.5); |
| 645 | INSERT INTO dbo.StudentGrade (CourseID, StudentID, Grade) |
| 646 | VALUES (4061, 22, 2.5); |
| 647 | INSERT INTO dbo.StudentGrade (CourseID, StudentID, Grade) |
| 649 | INSERT INTO dbo.StudentGrade (CourseID, StudentID, Grade) |
| 650 | VALUES (1045, 23, 1.5); |
| 651 | INSERT INTO dbo.StudentGrade (CourseID, StudentID, Grade) |
| 653 | INSERT INTO dbo.StudentGrade (CourseID, StudentID, Grade) |
| 655 | INSERT INTO dbo.StudentGrade (CourseID, StudentID, Grade) |
| 656 | VALUES (1050, 26, 3.5); |
| 657 | INSERT INTO dbo.StudentGrade (CourseID, StudentID, Grade) |
| 659 | INSERT INTO dbo.StudentGrade (CourseID, StudentID, Grade) |
| 661 | INSERT INTO dbo.StudentGrade (CourseID, StudentID, Grade) |
| 662 | VALUES (1045, 28, 2.5); |
| 663 | INSERT INTO dbo.StudentGrade (CourseID, StudentID, Grade) |
| 664 | VALUES (1050, 28, 3.5); |
| 665 | INSERT INTO dbo.StudentGrade (CourseID, StudentID, Grade) |
| 667 | INSERT INTO dbo.StudentGrade (CourseID, StudentID, Grade) |
| 668 | VALUES (1050, 30, 3.5); |
| 670 | INSERT INTO dbo.StudentGrade (CourseID, StudentID, Grade) |
3:RIA之ADO.NET ENTITY DATA MODEL
為web創建ADO.NET ENTITY DATA MODEL,如圖:
注意,習慣命名規則:Model數據庫名.edmx。
在下一步中,我們選擇剛才創建的數據庫:
選擇新建連接,按照指示完成數據庫連接配置。
進入下一步:
在這一步中,注意一定要選擇第一個紅框中的內容,否則默認不能生成聯表查詢。在下一步中,我們選擇“Generate from database”,如下:
點擊Finish后,VS為我們生成了一個以edmx為后綴的文件。OK,到此暫停,我們先來看看這個edmx文件是干什么用的,為我們完成了什么工作。
3.1:什么是EDM
ENTITY DATA MODEL,簡寫為EDM,中文為實體數據模型。它由三個概念組成。概念模型由概念架構定義語言文件 (.csdl)來定義,映射由映射規范語言文件 (.msl),存儲模型(又稱邏輯模型)由存儲架構定義語言文件 (.ssdl)來定義。這三者合在一起就是EDM模型。EDM模型在項目中的表現形式就是擴展名為.edmx的文件。
Entity Framework實現了一套類似于ADO.NET2.0中的連接類來操作EDM完成持久化。EntityFramework中所有發往EDM的操作都是經過EntityClient,包括使用LINQ to Entity進行的操作。目前可用操作如下:
4:針對web EMD的測試
理解了EMD在開發中所處的作用,我們就可以針對EDM來寫個測試項目。為了簡便期間,我們直接在EMD中的SchoolEntities類型的構造方法中直接創建測試(嚴格意義來說,這不是個單元測試,這僅是測試)。
針對這個操作,會在測試項目中生成一個SchoolEntitiesTest的類型,同時,在這個類型中會生成一個SchoolEntitiesConstructorTest的方法,如下:
由于我們僅僅測試EDM,而跟WEB本身沒有關系,所有我們注釋掉了紅框中的內容。同時我們寫入真正的測試代碼,如下:
這里的一個小細節是,連接字符串我們通過編碼的方式傳入到測試方法。EDM的連接字符串和ADO.NET的連接字符串有很大不同,在這里,可公開一下我們的生成EDM連接字符串的方法:
view sourceprint?
| 01 | public string GetConnectionString() |
| 03 | ??? string providerName = "System.Data.SqlClient"; |
| 04 | ??? string serverName = "192.168.0.96"; |
| 05 | ??? string databaseName = "mysample"; |
| 06 | ??? SqlConnectionStringBuilder sqlBuilder = new SqlConnectionStringBuilder(); |
| 07 | ??? sqlBuilder.DataSource = serverName; |
| 08 | ??? sqlBuilder.InitialCatalog = databaseName; |
| 09 | ??? sqlBuilder.IntegratedSecurity = false; |
| 10 | ??? sqlBuilder.UserID = "sa"; |
| 11 | ??? sqlBuilder.Password = "sasa"; |
| 12 | ??? string providerString = sqlBuilder.ToString(); |
| 13 | ??? EntityConnectionStringBuilder entityBuilder = new EntityConnectionStringBuilder(); |
| 14 | ??? entityBuilder.Provider = providerName; |
| 15 | ??? entityBuilder.ProviderConnectionString = providerString; |
| 16 | ??? entityBuilder.Provider = providerName; |
| 17 | ??? entityBuilder.Metadata = "res://*/Modelmysample.csdl|res://*/Modelmysample.ssdl|res://*/Modelmysample.msl"; |
| 18 | ??? return entityBuilder.ToString(); |
調試我們的測試代碼,最終我們會獲取到數據庫中的4條記錄。
通過了以上的闡述,我們了解了EDM的作用,以及如何測試EDM。接下來,我們需要知道如何在SL APP中調用WEB中的EDM。
5:Domain Service Class
在SL APP中調用EDM是通過WEB的Domain Service Class來實現的。簡單的說來,它是RIA SERVICE框架中的一個重要內容。
在WEB選擇添加新項,選擇Domain Service Class,命名,下一步會出現如下界面:
我們可以做出如上勾選。確定后,編譯整個解決方法,會發現目前的解決方案結構會變成如下形式:
注意,第一個紅框部分,是VS自動為我們在SL APP生成的。它是第二個紅框在客戶端的對應版本。我們需要將它包含到項目中去。它包含了所有服務端版本類中定義的方法、實體等,而可在客戶端直接調用。
6:Ria Service數據流轉
好了,經過以上的描述我們知道了:
EDM:直接操作數據庫;
Domain Service Class:調用EDM,并把數據接口通過WCF的形式開放給客戶端;
*.Web.g.cs:調用Domain Service Class,完成對數據的讀取,并最終呈現給UI;
7:最終展示
在SL APP中的UI調用呈現數據。前臺:
后臺,直接使用*.Web.g.cs中的DomainServiceMySample 加載數據:
view sourceprint?
| ??? InitializeComponent(); |
| ??? DomainServiceMySample context = new DomainServiceMySample(); |
| ??? context.Load(context.GetEmpQuery()); |
| ??? lb1.ItemsSource = context.emps; |
最后界面顯示:
8:問題
該示例演示了使用Entity Framework和WCF Ria Services進行Silverlight開發。我們當然可以繼續使用此模式完善功能,知道一個功能復雜的應用程序開發完畢。但是,當前,此示例起碼存在如下幾個問題。
1:實體模型被緊耦合在EDM中,同時它不能項目(模塊)使用。隨著每一次更新EDM,實體模型會被覆蓋;
2:EDM和BLL緊耦合在一起;
3:沒有提煉出數據接口,導致我們沒有辦法在此示例中進行單元測試。示例中雖然存在測試項目,但那是數據庫相關的,達不到單元測試的要求;
下篇我們將繼續重構該示例,以逐步解決這些問題。
本示例源碼下載:SilverlightApplicationSchool20110612.zip
轉載于:https://www.cnblogs.com/fcsh820/archive/2011/07/02/2096177.html
總結
以上是生活随笔為你收集整理的(转)使用Entity Framework和WCF Ria Services开发SilverLight之1:简单模型的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。