(转)使用Entity Framework和WCF Ria Services开发SilverLight之1:简单模型
原文地址: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的课程中有使用到它。如下:
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连接字符串的方法:
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 加载数据:
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:简单模型相关推荐
- 使用Entity Framework和WCF Ria Services开发SilverLight之6:查找指定字段
对数据库表指定字段的查找,又是实际工作中的一项必要工作.SL客户端仅获取实际需要的指定的字段,好处很多,比如:有助于减少网络流量. 有两类这样的使用场景. 1:联表查询不需要外键表 在上一篇中,我们使 ...
- 使用Entity Framework和WCF Ria Services开发SilverLight之4:Map之主外键映射
上一篇粗粗讲了一下如何使用EF4.1,针对POCO进行MAP,此篇在此基础上进行一下深入,具体讲一下如何进行映射. 1:主外键中的1对多映射 还是针对School数据库.查看如下两个表: 可以知道 ...
- Silverlight 应用 WCF RIA Services 在 IIS6 部署问题总结
WCF RIA Services 部署在IIS6很简单,但是也会出现一些问题 我们的应用是Silverlight 4 Business Application,应用了WCF RIA Service, ...
- [Translation]Silverlight 4-MVVM with Commanding and WCF RIA Services
原文地址:Silverlight 4 - MVVM with Commanding and WCF RIA Services 在我的前一篇文章 "WCF RIA Services and a ...
- 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 ...
- [译]WCF RIA Services中的集合(2)
原文地址:http://www.silverlightshow.net/items/Working-with-collections-in-WCF-RIA-Services-part-two.aspx ...
- [转]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 ...
- WCF RIA Services 概述
在一个三层架构的应用程序中,中间层介于表示层和数据层之间,你所写的业务逻辑和数据验证都将在中间层出现.创建拥有良好用户体验的RIA应用,你需要客户端和服务端有着相同的业务规则,因此在客户端和服务端保证 ...
- .Net Ria Services Preview 升级至 Wcf Ria Services Beta 记录
把使用 .Net Ria Services Preview 的项目升级至 Wcf Ria Services Beta 的基本操作如下: 准备工作 备份本地工作区代码,如果使用了源代码管理器的话,可以先 ...
最新文章
- 在CentOS 6.6 64bit上安装Python 3.5.0
- (十四)json、pickle与shelve模块
- 基于visual Studio2013解决C语言竞赛题之1070删除相同节点
- boost::stl_interfaces::detail相关的测试程序
- strtok函数取WinMain的参数
- 12个 Linux 中 grep 命令的超级用法实例
- silverlight 如何在浏览器的新页面里打开一个xaml
- 程序员九重镜界,很老的今天刚刚翻出来
- 详细解析Java中抽象类和接口的区别(很容易理解错)
- java取模运算_Java的四则运算符与取模运算符
- @Scheduled cron表达式
- 小心:光缆损毁 敲诈病毒现身互联网
- mybatisplus 结果_MyBatis Plus 将查询结果封装到指定实体
- 国家AAAAA级旅游景区数量统计
- 【蓝桥杯单片机的备赛旅行日记系列】之国赛决赛第五届多功能事件记录器
- HTML5 新的 Input 类型
- 【c语言】字符串比较
- java unix时间戳_Java与Unix时间戳的相互转换
- Bootstrap进阶四:jQuery插件详解
- 计算机辅助制造在汽车行业的应用,机械设计制造及其自动化在我国汽车行业的应用毕业论文(设计)..doc...
热门文章
- linux arm下硬件驱动程序放哪里,Arm-Linux摄像头驱动程序的移植
- (回溯Uva524)素数环
- 摄像头夜间拍摄画面有拖影_让客厅秒变健身房,OPPO智能电视R1+摄像头上手体验...
- js文件夹上传到服务器,js 上传img到服务器
- mysql 事务sqlserver_SQLServer数据库:事务与隔离级别实例讲解
- ucache灾备云报价_UCACHE灾备云功能
- 无季节效应的非平稳序列分析(一)
- 小网站asp好还是php好,网站程序是asp好还是php好,哪个更利于优化?
- php 前置匹配,浅析PHP正则表达式匹配的特定实现
- 云桌面部署_东胜区检察院检察工作网统一业务系统2.0云桌面终端全面部署完成...