原文地址: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?
001 SET ANSI_NULLS ON
002 GO
003 SET QUOTED_IDENTIFIER ON
004 GO
005
006 USE [master];
007 GO
008
009 IF EXISTS (SELECT * FROM sys.databases WHERE name = 'School')
010     DROP DATABASE School;
011 GO
012
013 -- Create the School database.
014 CREATE DATABASE School;
015 GO
016
017 -- Specify a simple recovery model
018 -- to keep the log growth to a minimum.
019 ALTER DATABASE School
020     SET RECOVERY SIMPLE;
021 GO
022
023 USE School;
024 GO
025
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'))
030 BEGIN
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
038 (
039     [DepartmentID] ASC
040 )WITH (IGNORE_DUP_KEY = OFF) ON [PRIMARY]
041 ) ON [PRIMARY]
042 END
043 GO
044
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'))
049 BEGIN
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
057 (
058     [PersonID] ASC
059 )WITH (IGNORE_DUP_KEY = OFF) ON [PRIMARY]
060 ) ON [PRIMARY]
061 END
062 GO
063
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'))
068 BEGIN
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
075 (
076     [CourseID] ASC
077 )WITH (IGNORE_DUP_KEY = OFF) ON [PRIMARY]
078 ) ON [PRIMARY]
079 END
080 GO
081
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'))
086 BEGIN
087 CREATE TABLE [dbo].[OnlineCourse](
088     [CourseID] [int] NOT NULL,
089     [URL] [nvarchar](100) NOT NULL,
090 CONSTRAINT [PK_OnlineCourse] PRIMARY KEY CLUSTERED
091 (
092     [CourseID] ASC
093 )WITH (IGNORE_DUP_KEY = OFF) ON [PRIMARY]
094 ) ON [PRIMARY]
095 END
096 GO
097
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'))
102 BEGIN
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
109 (
110     [EnrollmentID] ASC
111 )WITH (IGNORE_DUP_KEY = OFF) ON [PRIMARY]
112 ) ON [PRIMARY]
113 END
114 GO
115
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'))
120 BEGIN
121 CREATE TABLE [dbo].[CourseInstructor](
122     [CourseID] [int] NOT NULL,
123     [PersonID] [int] NOT NULL,
124 CONSTRAINT [PK_CourseInstructor] PRIMARY KEY CLUSTERED
125 (
126     [CourseID] ASC,
127     [PersonID] ASC
128 )WITH (IGNORE_DUP_KEY = OFF) ON [PRIMARY]
129 ) ON [PRIMARY]
130 END
131 GO
132
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'))
137 BEGIN
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
144 (
145     [CourseID] ASC
146 )WITH (IGNORE_DUP_KEY = OFF) ON [PRIMARY]
147 ) ON [PRIMARY]
148 END
149 GO
150
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'))
155 BEGIN
156 CREATE TABLE [dbo].[OfficeAssignment](
157     [InstructorID] [int] NOT NULL,
158     [Location] [nvarchar](50) NOT NULL,
159     [Timestamp] [timestamp] NOT NULL,
160 CONSTRAINT [PK_OfficeAssignment] PRIMARY KEY CLUSTERED
161 (
162     [InstructorID] ASC
163 )WITH (IGNORE_DUP_KEY = OFF) ON [PRIMARY]
164 ) ON [PRIMARY]
165 END
166 GO
167
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])
175 GO
176 ALTER TABLE [dbo].[OnsiteCourse] CHECK
177        CONSTRAINT [FK_OnsiteCourse_Course]
178 GO
179
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])
187 GO
188 ALTER TABLE [dbo].[OnlineCourse] CHECK
189        CONSTRAINT [FK_OnlineCourse_Course]
190 GO
191
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])
199 GO
200 ALTER TABLE [dbo].[StudentGrade] CHECK
201        CONSTRAINT [FK_StudentGrade_Course]
202 GO
203
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])
211 GO
212 ALTER TABLE [dbo].[StudentGrade] CHECK
213        CONSTRAINT [FK_StudentGrade_Student]
214 GO
215
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])
223 GO
224 ALTER TABLE [dbo].[CourseInstructor] CHECK
225    CONSTRAINT [FK_CourseInstructor_Course]
226 GO
227
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])
235 GO
236 ALTER TABLE [dbo].[CourseInstructor] CHECK
237    CONSTRAINT [FK_CourseInstructor_Person]
238 GO
239
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])
247 GO
248 ALTER TABLE [dbo].[Course] CHECK CONSTRAINT [FK_Course_Department]
249 GO
250
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])
258 GO
259 ALTER TABLE [dbo].[OfficeAssignment] CHECK
260    CONSTRAINT [FK_OfficeAssignment_Person]
261 GO
262
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'))
267 BEGIN
268 EXEC dbo.sp_executesql @statement = N'
269 CREATE PROCEDURE [dbo].[InsertOfficeAssignment]
270         @InstructorID int,
271         @Location nvarchar(50)
272         AS
273         INSERT INTO dbo.OfficeAssignment (InstructorID, Location)
274         VALUES (@InstructorID, @Location);
275         IF @@ROWCOUNT > 0
276         BEGIN
277             SELECT [Timestamp] FROM OfficeAssignment
278                 WHERE InstructorID=@InstructorID;
279         END
280 '
281 END
282 GO
283
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'))
288 BEGIN
289 EXEC dbo.sp_executesql @statement = N'
290 CREATE PROCEDURE [dbo].[UpdateOfficeAssignment]
291         @InstructorID int,
292         @Location nvarchar(50),
293         @OrigTimestamp timestamp
294         AS
295         UPDATE OfficeAssignment SET Location=@Location
296         WHERE InstructorID=@InstructorID AND [Timestamp]=@OrigTimestamp;
297         IF @@ROWCOUNT > 0
298         BEGIN
299             SELECT [Timestamp] FROM OfficeAssignment
300                 WHERE InstructorID=@InstructorID;
301         END
302 '
303 END
304 GO
305
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'))
310 BEGIN
311 EXEC dbo.sp_executesql @statement = N'
312 CREATE PROCEDURE [dbo].[DeleteOfficeAssignment]
313         @InstructorID int
314         AS
315         DELETE FROM OfficeAssignment
316         WHERE InstructorID=@InstructorID;
317 '
318 END
319 GO
320
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'))
325 BEGIN
326 EXEC dbo.sp_executesql @statement = N'
327 CREATE PROCEDURE [dbo].[DeletePerson]
328         @PersonID int
329         AS
330         DELETE FROM Person WHERE PersonID = @PersonID;
331 '
332 END
333 GO
334
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'))
339 BEGIN
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
347         AS
348         UPDATE Person SET LastName=@LastName,
349                 FirstName=@FirstName,
350                 HireDate=@HireDate,
351                 EnrollmentDate=@EnrollmentDate
352         WHERE PersonID=@PersonID;
353 '
354 END
355 GO
356
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'))
361 BEGIN
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
368         AS
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;
378 '
379 END
380 GO
381
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'))
386 BEGIN
387 EXEC dbo.sp_executesql @statement = N'
388 CREATE PROCEDURE [dbo].[GetStudentGrades]
389             @StudentID int
390             AS
391             SELECT EnrollmentID, Grade, CourseID, StudentID FROM dbo.StudentGrade
392             WHERE StudentID = @StudentID
393 '
394 END
395 GO
396
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'))
401 BEGIN
402 EXEC dbo.sp_executesql @statement = N'
403 CREATE PROCEDURE [dbo].[GetDepartmentName]
404       @ID int,
405       @Name nvarchar(50) OUTPUT
406       AS
407       SELECT @Name = Name FROM Department
408       WHERE DepartmentID = @ID
409 '
410 END
411 GO
412
413 -- Insert data into the Person table.
414 USE School
415 GO
416 SET IDENTITY_INSERT dbo.Person ON
417 GO
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);
486 GO
487 SET IDENTITY_INSERT dbo.Person OFF
488 GO
489
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);
499 GO
500
501
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);
523 GO
524
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');
534
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');
548
549 -- Insert data into the CourseInstructor table.
550 INSERT INTO dbo.CourseInstructor(CourseID, PersonID)
551 VALUES (1050, 1);
552 INSERT INTO dbo.CourseInstructor(CourseID, PersonID)
553 VALUES (1061, 31);
554 INSERT INTO dbo.CourseInstructor(CourseID, PersonID)
555 VALUES (1045, 5);
556 INSERT INTO dbo.CourseInstructor(CourseID, PersonID)
557 VALUES (2030, 4);
558 INSERT INTO dbo.CourseInstructor(CourseID, PersonID)
559 VALUES (2021, 27);
560 INSERT INTO dbo.CourseInstructor(CourseID, PersonID)
561 VALUES (2042, 25);
562 INSERT INTO dbo.CourseInstructor(CourseID, PersonID)
563 VALUES (4022, 18);
564 INSERT INTO dbo.CourseInstructor(CourseID, PersonID)
565 VALUES (4041, 32);
566 INSERT INTO dbo.CourseInstructor(CourseID, PersonID)
567 VALUES (4061, 34);
568 GO
569
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');
589
590 -- Insert data into the StudentGrade table.
591 INSERT INTO dbo.StudentGrade (CourseID, StudentID, Grade)
592 VALUES (2021, 2, 4);
593 INSERT INTO dbo.StudentGrade (CourseID, StudentID, Grade)
594 VALUES (2030, 2, 3.5);
595 INSERT INTO dbo.StudentGrade (CourseID, StudentID, Grade)
596 VALUES (2021, 3, 3);
597 INSERT INTO dbo.StudentGrade (CourseID, StudentID, Grade)
598 VALUES (2030, 3, 4);
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)
606 VALUES (2042, 7, 4);
607 INSERT INTO dbo.StudentGrade (CourseID, StudentID, Grade)
608 VALUES (2021, 8, 3);
609 INSERT INTO dbo.StudentGrade (CourseID, StudentID, Grade)
610 VALUES (2042, 8, 3);
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)
622 VALUES (4022, 14, 3);
623 INSERT INTO dbo.StudentGrade (CourseID, StudentID, Grade)
624 VALUES (4022, 13, 4);
625 INSERT INTO dbo.StudentGrade (CourseID, StudentID, Grade)
626 VALUES (4061, 13, 4);
627 INSERT INTO dbo.StudentGrade (CourseID, StudentID, Grade)
628 VALUES (4041, 14, 3);
629 INSERT INTO dbo.StudentGrade (CourseID, StudentID, Grade)
630 VALUES (4022, 15, 2.5);
631 INSERT INTO dbo.StudentGrade (CourseID, StudentID, Grade)
632 VALUES (4022, 16, 2);
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)
638 VALUES (4061, 20, 4);
639 INSERT INTO dbo.StudentGrade (CourseID, StudentID, Grade)
640 VALUES (4061, 21, 2);
641 INSERT INTO dbo.StudentGrade (CourseID, StudentID, Grade)
642 VALUES (4022, 22, 3);
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)
648 VALUES (4022, 23, 3);
649 INSERT INTO dbo.StudentGrade (CourseID, StudentID, Grade)
650 VALUES (1045, 23, 1.5);
651 INSERT INTO dbo.StudentGrade (CourseID, StudentID, Grade)
652 VALUES (1061, 24, 4);
653 INSERT INTO dbo.StudentGrade (CourseID, StudentID, Grade)
654 VALUES (1061, 25, 3);
655 INSERT INTO dbo.StudentGrade (CourseID, StudentID, Grade)
656 VALUES (1050, 26, 3.5);
657 INSERT INTO dbo.StudentGrade (CourseID, StudentID, Grade)
658 VALUES (1061, 26, 3);
659 INSERT INTO dbo.StudentGrade (CourseID, StudentID, Grade)
660 VALUES (1061, 27, 3);
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)
666 VALUES (1061, 29, 4);
667 INSERT INTO dbo.StudentGrade (CourseID, StudentID, Grade)
668 VALUES (1050, 30, 3.5);
669
670 INSERT INTO dbo.StudentGrade (CourseID, StudentID, Grade)
671 VALUES (1061, 30, 4);
672 GO

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()
02 {
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();
19 }

调试我们的测试代码,最终我们会获取到数据库中的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?
public MainPage()
{
    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:简单模型相关推荐

  1. 使用Entity Framework和WCF Ria Services开发SilverLight之6:查找指定字段

    对数据库表指定字段的查找,又是实际工作中的一项必要工作.SL客户端仅获取实际需要的指定的字段,好处很多,比如:有助于减少网络流量. 有两类这样的使用场景. 1:联表查询不需要外键表 在上一篇中,我们使 ...

  2. 使用Entity Framework和WCF Ria Services开发SilverLight之4:Map之主外键映射

    上一篇粗粗讲了一下如何使用EF4.1,针对POCO进行MAP,此篇在此基础上进行一下深入,具体讲一下如何进行映射.   1:主外键中的1对多映射 还是针对School数据库.查看如下两个表: 可以知道 ...

  3. Silverlight 应用 WCF RIA Services 在 IIS6 部署问题总结

    WCF RIA Services 部署在IIS6很简单,但是也会出现一些问题 我们的应用是Silverlight 4 Business Application,应用了WCF RIA Service,  ...

  4. [Translation]Silverlight 4-MVVM with Commanding and WCF RIA Services

    原文地址:Silverlight 4 - MVVM with Commanding and WCF RIA Services 在我的前一篇文章 "WCF RIA Services and a ...

  5. Silverlight 4 - MVVM with Commanding and WCF RIA Services

    In my previous post I wrote about "WCF RIA Services and a guide to use DTO/"Presentation M ...

  6. [译]WCF RIA Services中的集合(2)

    原文地址:http://www.silverlightshow.net/items/Working-with-collections-in-WCF-RIA-Services-part-two.aspx ...

  7. [转]Using The Entity Framework With WCF

    本文转自:http://www.gavindraper.co.uk/2010/12/07/using-the-entity-framework-with-wcf/ I've had a few pro ...

  8. WCF RIA Services 概述

    在一个三层架构的应用程序中,中间层介于表示层和数据层之间,你所写的业务逻辑和数据验证都将在中间层出现.创建拥有良好用户体验的RIA应用,你需要客户端和服务端有着相同的业务规则,因此在客户端和服务端保证 ...

  9. .Net Ria Services Preview 升级至 Wcf Ria Services Beta 记录

    把使用 .Net Ria Services Preview 的项目升级至 Wcf Ria Services Beta 的基本操作如下: 准备工作 备份本地工作区代码,如果使用了源代码管理器的话,可以先 ...

最新文章

  1. 在CentOS 6.6 64bit上安装Python 3.5.0
  2. (十四)json、pickle与shelve模块
  3. 基于visual Studio2013解决C语言竞赛题之1070删除相同节点
  4. boost::stl_interfaces::detail相关的测试程序
  5. strtok函数取WinMain的参数
  6. 12个 Linux 中 grep 命令的超级用法实例
  7. silverlight 如何在浏览器的新页面里打开一个xaml
  8. 程序员九重镜界,很老的今天刚刚翻出来
  9. 详细解析Java中抽象类和接口的区别(很容易理解错)
  10. java取模运算_Java的四则运算符与取模运算符
  11. @Scheduled cron表达式
  12. 小心:光缆损毁 敲诈病毒现身互联网
  13. mybatisplus 结果_MyBatis Plus 将查询结果封装到指定实体
  14. 国家AAAAA级旅游景区数量统计
  15. 【蓝桥杯单片机的备赛旅行日记系列】之国赛决赛第五届多功能事件记录器
  16. HTML5 新的 Input 类型
  17. 【c语言】字符串比较
  18. java unix时间戳_Java与Unix时间戳的相互转换
  19. Bootstrap进阶四:jQuery插件详解
  20. 计算机辅助制造在汽车行业的应用,机械设计制造及其自动化在我国汽车行业的应用毕业论文(设计)..doc...

热门文章

  1. linux arm下硬件驱动程序放哪里,Arm-Linux摄像头驱动程序的移植
  2. (回溯Uva524)素数环
  3. 摄像头夜间拍摄画面有拖影_让客厅秒变健身房,OPPO智能电视R1+摄像头上手体验...
  4. js文件夹上传到服务器,js 上传img到服务器
  5. mysql 事务sqlserver_SQLServer数据库:事务与隔离级别实例讲解
  6. ucache灾备云报价_UCACHE灾备云功能
  7. 无季节效应的非平稳序列分析(一)
  8. 小网站asp好还是php好,网站程序是asp好还是php好,哪个更利于优化?
  9. php 前置匹配,浅析PHP正则表达式匹配的特定实现
  10. 云桌面部署_东胜区检察院检察工作网统一业务系统2.0云桌面终端全面部署完成...