原文地址:http://www.cnblogs.com/luminji/archive/2011/06/10/2077696.html
?
本文目的是通過Silverlight ria service完成一次數(shù)據(jù)的讀取過程,并且在此基礎(chǔ)上建立測(cè)試項(xiàng)目。
Ria service借助于WCF和ADO.NET Entity Framework構(gòu)建分布式開發(fā)框架。使用它可以快速構(gòu)建自己的開發(fā)模式。
1:基礎(chǔ)結(jié)構(gòu)
首先,創(chuàng)建SL APP,如下:
然后,選擇創(chuàng)建web:
可以,也可以不勾選enable wcf ria service,如果勾選了,在SL APP中會(huì)多幾個(gè)DLL的引用,其它沒有任何差別。如圖:
2:創(chuàng)建一個(gè)示例數(shù)據(jù)庫
這是一個(gè)小而輕型的數(shù)據(jù)庫,在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創(chuàng)建ADO.NET ENTITY DATA MODEL,如圖:
注意,習(xí)慣命名規(guī)則:Model數(shù)據(jù)庫名.edmx。
在下一步中,我們選擇剛才創(chuàng)建的數(shù)據(jù)庫:
選擇新建連接,按照指示完成數(shù)據(jù)庫連接配置。
進(jìn)入下一步:
在這一步中,注意一定要選擇第一個(gè)紅框中的內(nèi)容,否則默認(rèn)不能生成聯(lián)表查詢。在下一步中,我們選擇“Generate from database”,如下:
點(diǎn)擊Finish后,VS為我們生成了一個(gè)以edmx為后綴的文件。OK,到此暫停,我們先來看看這個(gè)edmx文件是干什么用的,為我們完成了什么工作。
3.1:什么是EDM
ENTITY DATA MODEL,簡(jiǎn)寫為EDM,中文為實(shí)體數(shù)據(jù)模型。它由三個(gè)概念組成。概念模型由概念架構(gòu)定義語言文件 (.csdl)來定義,映射由映射規(guī)范語言文件 (.msl),存儲(chǔ)模型(又稱邏輯模型)由存儲(chǔ)架構(gòu)定義語言文件 (.ssdl)來定義。這三者合在一起就是EDM模型。EDM模型在項(xiàng)目中的表現(xiàn)形式就是擴(kuò)展名為.edmx的文件。
Entity Framework實(shí)現(xiàn)了一套類似于ADO.NET2.0中的連接類來操作EDM完成持久化。EntityFramework中所有發(fā)往EDM的操作都是經(jīng)過EntityClient,包括使用LINQ to Entity進(jìn)行的操作。目前可用操作如下:
4:針對(duì)web EMD的測(cè)試
理解了EMD在開發(fā)中所處的作用,我們就可以針對(duì)EDM來寫個(gè)測(cè)試項(xiàng)目。為了簡(jiǎn)便期間,我們直接在EMD中的SchoolEntities類型的構(gòu)造方法中直接創(chuàng)建測(cè)試(嚴(yán)格意義來說,這不是個(gè)單元測(cè)試,這僅是測(cè)試)。
針對(duì)這個(gè)操作,會(huì)在測(cè)試項(xiàng)目中生成一個(gè)SchoolEntitiesTest的類型,同時(shí),在這個(gè)類型中會(huì)生成一個(gè)SchoolEntitiesConstructorTest的方法,如下:
由于我們僅僅測(cè)試EDM,而跟WEB本身沒有關(guān)系,所有我們注釋掉了紅框中的內(nèi)容。同時(shí)我們寫入真正的測(cè)試代碼,如下:
這里的一個(gè)小細(xì)節(jié)是,連接字符串我們通過編碼的方式傳入到測(cè)試方法。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();
調(diào)試我們的測(cè)試代碼,最終我們會(huì)獲取到數(shù)據(jù)庫中的4條記錄。
通過了以上的闡述,我們了解了EDM的作用,以及如何測(cè)試EDM。接下來,我們需要知道如何在SL APP中調(diào)用WEB中的EDM。
5:Domain Service Class
在SL APP中調(diào)用EDM是通過WEB的Domain Service Class來實(shí)現(xiàn)的。簡(jiǎn)單的說來,它是RIA SERVICE框架中的一個(gè)重要內(nèi)容。
在WEB選擇添加新項(xiàng),選擇Domain Service Class,命名,下一步會(huì)出現(xiàn)如下界面:
我們可以做出如上勾選。確定后,編譯整個(gè)解決方法,會(huì)發(fā)現(xiàn)目前的解決方案結(jié)構(gòu)會(huì)變成如下形式:
注意,第一個(gè)紅框部分,是VS自動(dòng)為我們?cè)赟L APP生成的。它是第二個(gè)紅框在客戶端的對(duì)應(yīng)版本。我們需要將它包含到項(xiàng)目中去。它包含了所有服務(wù)端版本類中定義的方法、實(shí)體等,而可在客戶端直接調(diào)用。
6:Ria Service數(shù)據(jù)流轉(zhuǎn)
好了,經(jīng)過以上的描述我們知道了:
EDM:直接操作數(shù)據(jù)庫;
Domain Service Class:調(diào)用EDM,并把數(shù)據(jù)接口通過WCF的形式開放給客戶端;
*.Web.g.cs:調(diào)用Domain Service Class,完成對(duì)數(shù)據(jù)的讀取,并最終呈現(xiàn)給UI;
7:最終展示
在SL APP中的UI調(diào)用呈現(xiàn)數(shù)據(jù)。前臺(tái):
后臺(tái),直接使用*.Web.g.cs中的DomainServiceMySample 加載數(shù)據(jù):
view sourceprint?
??? InitializeComponent();
??? DomainServiceMySample context = new DomainServiceMySample();
??? context.Load(context.GetEmpQuery());
??? lb1.ItemsSource = context.emps;
最后界面顯示:
8:問題
該示例演示了使用Entity Framework和WCF Ria Services進(jìn)行Silverlight開發(fā)。我們當(dāng)然可以繼續(xù)使用此模式完善功能,知道一個(gè)功能復(fù)雜的應(yīng)用程序開發(fā)完畢。但是,當(dāng)前,此示例起碼存在如下幾個(gè)問題。
1:實(shí)體模型被緊耦合在EDM中,同時(shí)它不能項(xiàng)目(模塊)使用。隨著每一次更新EDM,實(shí)體模型會(huì)被覆蓋;
2:EDM和BLL緊耦合在一起;
3:沒有提煉出數(shù)據(jù)接口,導(dǎo)致我們沒有辦法在此示例中進(jìn)行單元測(cè)試。示例中雖然存在測(cè)試項(xiàng)目,但那是數(shù)據(jù)庫相關(guān)的,達(dá)不到單元測(cè)試的要求;
下篇我們將繼續(xù)重構(gòu)該示例,以逐步解決這些問題。
本示例源碼下載:SilverlightApplicationSchool20110612.zip
轉(zhuǎn)載于:https://www.cnblogs.com/fcsh820/archive/2011/07/02/2096177.html
總結(jié)
以上是生活随笔 為你收集整理的(转)使用Entity Framework和WCF Ria Services开发SilverLight之1:简单模型 的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔 網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔 推薦給好友。