WCF RIAãµãŒãã¹ã ã¹ã¿ãŒãã ããŒã1WCF RIAãµãŒãã¹ã ããŒã¿ãåä¿¡ããŸãã ããŒã2WCF RIAãµãŒãã¹ã ããŒã¿æŽæ°ã ããŒã3WCF RIAãµãŒãã¹ã Model-View-ViewModelïŒMVVMïŒãã¿ãŒã³ã®çŽ¹ä»ã ããŒã4翻蚳è
ãã
ãã®äžé£ã®ç¿»èš³ã§ã¯ããªãªãžãã«ã¯å€ãVSã䜿çšããŠãããããå人çã«ã¯ããªãã®éšåãè¿œå ãããŠããŸãã è¡ãã
ã泚æ ããããã®åçïŒ
ãšã³ããªãŒ
ããŸããŸãªå Žæã«åæ£ããã倧éã®ããŒã¿ã䜿çšããŠã¯ã©ã€ã¢ã³ããæäœããäœããã®æ¹æ³ã§åéããå¿
èŠããããçé¢ç®ãªããžãã¹ã¢ããªã±ãŒã·ã§ã³ãäœæããå¿
èŠããããšããŸãã ãã®ã¿ã¹ã¯ãå®è£
ããã«ã¯ãå€ãã®æ°ãããã¯ãããžãŒãšã¢ãããŒããåŠã³ãå€ãã®ã³ãŒããæžãããããã°ããå¿
èŠããããŸãã çµæã¯äœã§ããïŒ å€±ç€Œãªå Žåã¯ãã¢ããªã±ãŒã·ã§ã³ã®ãµãŒããŒåŽããã¯ã©ã€ã¢ã³ãã«ããŒã¿ãéä¿¡ããã ãã§ãã ããŠãããŒã¿ããŒã¹ãæäœããŸãã ãããŠããŸãäœã«çŠç¹ãåœãŠããã§ããïŒ ããŒã¿è»¢éã®å®è£
ã«ã€ããŠïŒ ãŸãã¯ããã®ããŒã¿ãåŠçãæäœãæ瀺ããããžãã¯äžã§ïŒ 2çªç®ãéžæãããšæããŸãã
WCF RIA Servicesã¯ãSilverlightã«åºã¥ããããŒã¿è»¢éã®èªååãšãã«ãã¬ãã«ã¢ããªã±ãŒã·ã§ã³ã®äœæãæäŸããéçºè
ã®äœæ¥ã®è«çã«æ³šæãéäžãããŸãã ãµãŒããŒã³ãŒãã®ã³ããŒã1åã ãèšè¿°ãããšãèªåçã«ç§»æ€ãããã¯ã©ã€ã¢ã³ãåŽã§äœ¿çšå¯èœã«ãªããŸããéçºè
ãæåã§è€è£œããããä»ã®ããªãã¯ãé©çšãããããå¿
èŠã¯ãããŸããã ãŸããã¯ã©ã€ã¢ã³ãã§ã¯ãæ€èšŒãã¢ã¯ã»ã¹æš©ãªã©ããã¹ãŠã®ãµãŒããŒæ©èœãåŒãç¶ãå©çšå¯èœã§ãã
ãã®ã·ãªãŒãºã®èšäºã§ã¯ãWCF RIAãµãŒãã¹ã®äž»ãªæ©èœã«ç²Ÿéããå®éã«ãã®ã¢ãããŒããæäŸããå©ç¹ã確èªããŸãã 以äžã®å³ã¯ãWCF RIAãµãŒãã¹ãæ
åœãããã®ã瀺ããŠããŸãã

ä»æ¥ã¯ãæšæºã§æãã·ã³ãã«ãªSilverlightãã³ãã¬ãŒãã䜿çšããŸãã åŸç¶ã®éšåã§ã¯ãã¢ããªã±ãŒã·ã§ã³ãå®æãããæ°ããææ³ãæŠè¡ãæè¡ã䜿çšããŠç¥èãå¢ãããŸãããã®1ã€ã¯Model-View-ViewModelïŒMVVMïŒãã¿ãŒã³ãšåäœãã¹ãã§ãã
äœæäžã®ã¢ããªã±ãŒã·ã§ã³ã«ãã£ãŠè§£æ±ºãããã¿ã¹ã¯
ã€ãã³ããå
¥åããååãã¢ãŒãã£ã¹ãããããžã§ã¯ããéå§æ¥ãšçµäºæ¥ãå
¥åã§ããé»åããŒãããã¯ã äžè¬ã«ãè€éãªããšãç°åžžãªããšã¯äœããããŸããããäœãããå¿
èŠãããããããç解ããããšã¯ãç 究察象ã®æè¡ã®æ çµã¿å
ã§ãããè¡ãæ¹æ³ã®ç解ãä¿é²ããã ãã§ãã
WCF RIAãµãŒãã¹ã®åŠç¿é¢ïŒ
- ãããžã§ã¯ããªã³ã¯-Silverlightã¯ã©ã€ã¢ã³ããããžã§ã¯ããšãµãŒããŒåŽã®Webã¢ããªã±ãŒã·ã§ã³ãŸãã¯ã©ã€ãã©ãªã¯ã©ã¹éã®ãªã³ã¯ã ãµãŒããŒãããžã§ã¯ãã¯ããã¡ã€ã³ãµãŒãã¹ããšã³ãã£ãã£ãã¡ã¿ããŒã¿ãžã®ãªã³ã¯ãå®çŸ©ãŸãã¯äœæãããµãŒããŒã§å®çŸ©ãããã³ãŒãã«ã¯ã©ã€ã¢ã³ããã¢ã¯ã»ã¹ã§ããã¡ã«ããºã ãæäŸããŸãã ãªã³ã¯ã®ãããã§ãã¯ã©ã€ã¢ã³ãã«å¿
èŠãªãã¹ãŠã®ã³ãŒãã¯ã³ã³ãã€ã«æã«åçã«çæãããŸãã
- ãã¡ã€ã³ãµãŒãã¹-WCF RIAãµãŒãã¹ã®ã³ã¢ã ãµãŒããŒã§å®è¡ã§ããæäœã決å®ããŸãã åºæ¬çã«ã¯ãCRUDïŒæžã蟌ã¿ãèªã¿åããæŽæ°ãåé€ïŒã«ãªããŸãããå¿
èŠã ãšæãããä»ã®ãã®ã§ãããŸããŸããã ãããã®æäœã¯ãã¹ãŠãWCFã®ãããã§ã¯ã©ã€ã¢ã³ãåŽã§èªåçã«å©çšå¯èœã«ãªããã¯ã©ã€ã¢ã³ãã¯ãµãŒããŒåŽã«ã€ããŠã»ãšãã©äœãç¥ãå¿
èŠããããŸããã
- ãšã³ãã£ãã£-ãµãŒããŒåŽã§ãšã³ãã£ãã£ã®ã¿ã€ãã決å®ããå¿
èŠããããã¯ã©ã€ã¢ã³ãåŽã¯èªåã³ãŒãçæã®ãããã§ããããæäœããŸãã æ€èšŒããã³ãã®ä»ã®ã¡ã¿ããŒã¿ã䜿çšããããšãã§ããŸãã ãµãŒããŒãšã¯ã©ã€ã¢ã³ãåŽã®ãšã³ãã£ãã£ã¿ã€ãã¯ããããã®éã§ããŒã¿ã転éãããšãã«ãã·ãªã¢ã«å/éã·ãªã¢ã«åæäœã«äœ¿çšãããŸãã ãšã³ãã£ãã£ã¯ãEntity FrameworkãLINQ to SQLããŸãã¯Plain Old CLR ObjectsïŒPOCOïŒã䜿çšããŠäœæã§ããŸãã
- ãã¡ã€ã³ã³ã³ããã¹ã-ãã¡ã€ã³ãµãŒãã¹ã®ã¯ã©ã€ã¢ã³ãã¢ããã°ã ã³ãŒããèªåçæããŸããããã«ããããµãŒããŒåŽã®æ©èœã«ã¢ã¯ã»ã¹ã§ããŸãã ããã«ã¯ããµãŒãã¹ãåŒã³åºãæ©èœãæäŸããWCFãããã·ãå«ãŸããŠããŸãããŸãããµãŒããŒåŽã§å®è¡ããå¿
èŠããããªã¯ãšã¹ãã管çãããšã³ãã£ãã£ã®å€æŽãªã©ã远跡ããŸãã
- DomainDataSourceã¯ãã¯ãšãªãå®è¡ããå€æŽããµãŒããŒã«éç¥ããããã«äœ¿çšãããããŒã¿ãœãŒã¹ãªããžã§ã¯ãã§ãã XAMLãªã©ã§ã®çŽæ¥ãã€ã³ããä¿é²ãããŸãã
æé 1ïŒSilverlightã¢ããªã±ãŒã·ã§ã³ãšãµãŒããŒåŽãžã®ãªã³ã¯ãäœæããŸãã
ã¿ã¹ã¯ãšãã¹ãŠã®é¢é£æ
å ±ãä¿åããåçŽãªããŒã¿ããŒã¹ã䜿çšããŸãã ãããè¡ãã«ã¯ããããžã§ã¯ãã®éŠ¬ã«ããTaskManager.sqlã¹ã¯ãªãããå®è¡ããããŒã¿ããŒã¹ãšã¹ããŒããäœæããããŒã¿ããŒã¹ã«åæå€ãå
¥åããå¿
èŠããããŸãã
ãTasksManagerããšããååã®æ°ãããããžã§ã¯ããäœæããŸãã WCF RIAãµãŒãã¹ã䜿çšããæ©èœã¯ãããããã¿ã€ãã®Silverlightã¢ããªã±ãŒã·ã§ã³ã«åºæã®ãã®ã§ãã ãã ããæãåçŽãªãã®ããå§ããŠããSilverlight Applicationããã³ãã¬ãŒããéžæããŸãããã

[OK]ãã¿ã³ãã¯ãªãã¯ãããšã次ã®ãã€ã¢ãã°ããã¯ã¹ãéããŸããããã§ã[WCF RIAãµãŒãã¹ãæå¹ã«ãã]ã«ããŒãã£ãŒãè¿œå ããå¿
èŠããããŸãã

ãã®ãããã§ããµãŒããŒãããžã§ã¯ããžã®å¿
èŠãªãªã³ã¯ãäœæãããã³ãŒãçæãåè¿°ã®ãã®ä»ã®æ©èœã衚瀺ãããŸãã
[OK]ãã¯ãªãã¯ããŠããããžã§ã¯ãã®äœæãåŸ
ã¡ãŸãã
ã¹ããã2ïŒãã¡ã€ã³ã¢ãã«ãšã³ãã£ãã£ãäœæãã
WCF RIAãµãŒãã¹ã¯äž»ã«ã¯ã©ã€ã¢ã³ããšãµãŒããŒéã§ããŒã¿ãããåãããããã«èšèšãããŠãããããããŒã¿ã¢ãã«ããŒã¿ãå¿
èŠã«ãªããŸãã ããã«äœ¿ããEntity FrameworkããµããŒããããŠããŸãã ãã ããWCF RIA Services Toolkitã§LINQ to SQLã䜿çšããããšã¯å¯èœã§ãã ç¬èªã®ãã¡ã€ã³ãµãŒãã¹ãäœæããå ŽåãPOCOã䜿çšã§ããŸãã 次ã«ãæšæºã®Entity Frameworkã䜿çšããŸãã
å
ã®TaskManager.sqlUSE [master] GO IF EXISTS (SELECT name FROM sys.databases WHERE name = N'TaskManager.mdf') DROP DATABASE [TaskManager.mdf] GO CREATE DATABASE [TaskManager.mdf] GO USE [TaskManager.mdf] GO SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO CREATE TABLE [dbo].[User]( [UserId] [int] IDENTITY(1,1) NOT NULL, [Username] [nvarchar](250) NOT NULL, [Password] [nvarchar](250) NOT NULL, CONSTRAINT [PK_User] PRIMARY KEY CLUSTERED ( [UserId] ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] ) ON [PRIMARY] GO SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO CREATE TABLE [dbo].[Customer]( [CustomerId] [int] IDENTITY(1,1) NOT NULL, [CustomerName] [nvarchar](250) NOT NULL, CONSTRAINT [PK_Customer] PRIMARY KEY CLUSTERED ( [CustomerId] ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] ) ON [PRIMARY] GO SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO CREATE TABLE [dbo].[Project]( [ProjectId] [int] IDENTITY(1,1) NOT NULL, [ProjectName] [nvarchar](250) NOT NULL, [Description] [nvarchar](max) NULL, [CustomerId] [int] NULL, CONSTRAINT [PK_Project] PRIMARY KEY CLUSTERED ( [ProjectId] ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] ) ON [PRIMARY] GO SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO CREATE TABLE [dbo].[Task]( [TaskId] [int] IDENTITY(1,1) NOT NULL, [TaskName] [nvarchar](250) NOT NULL, [Description] [nvarchar](max) NULL, [StartDate] [datetime] NULL, [EndDate] [datetime] NULL, [CustomerId] [int] NULL, [ProjectId] [int] NULL, [UserId] [int] NULL, CONSTRAINT [PK_Task] PRIMARY KEY CLUSTERED ( [TaskId] ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] ) ON [PRIMARY] GO SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO CREATE TABLE [dbo].[UsersTasks]( [TaskId] [int] NOT NULL, [UserId] [int] NOT NULL, CONSTRAINT [PK_UsersTasks] PRIMARY KEY CLUSTERED ( [TaskId] ASC, [UserId] ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] ) ON [PRIMARY] GO SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO CREATE TABLE [dbo].[TimeEntry]( [TimeEntryId] [int] IDENTITY(1,1) NOT NULL, [StartTime] [datetime] NOT NULL, [EndTime] [datetime] NOT NULL, [TaskId] [int] NOT NULL, [Description] [nvarchar](max) NOT NULL, CONSTRAINT [PK_TimeEntry] PRIMARY KEY CLUSTERED ( [TimeEntryId] ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] ) ON [PRIMARY] GO ALTER TABLE [dbo].[Project] WITH CHECK ADD CONSTRAINT [FK_Project_Customer] FOREIGN KEY([CustomerId]) REFERENCES [dbo].[Customer] ([CustomerId]) GO ALTER TABLE [dbo].[Project] CHECK CONSTRAINT [FK_Project_Customer] GO ALTER TABLE [dbo].[Task] WITH CHECK ADD CONSTRAINT [FK_Task_Customer] FOREIGN KEY([CustomerId]) REFERENCES [dbo].[Customer] ([CustomerId]) GO ALTER TABLE [dbo].[Task] CHECK CONSTRAINT [FK_Task_Customer] GO ALTER TABLE [dbo].[Task] WITH CHECK ADD CONSTRAINT [FK_Task_Project] FOREIGN KEY([ProjectId]) REFERENCES [dbo].[Project] ([ProjectId]) GO ALTER TABLE [dbo].[Task] CHECK CONSTRAINT [FK_Task_Project] GO ALTER TABLE [dbo].[UsersTasks] WITH CHECK ADD CONSTRAINT [FK_UsersTasks_Task] FOREIGN KEY([TaskId]) REFERENCES [dbo].[Task] ([TaskId]) GO ALTER TABLE [dbo].[UsersTasks] CHECK CONSTRAINT [FK_UsersTasks_Task] GO ALTER TABLE [dbo].[UsersTasks] WITH CHECK ADD CONSTRAINT [FK_UsersTasks_User] FOREIGN KEY([UserId]) REFERENCES [dbo].[User] ([UserId]) GO ALTER TABLE [dbo].[UsersTasks] CHECK CONSTRAINT [FK_UsersTasks_User] GO ALTER TABLE [dbo].[TimeEntry] WITH CHECK ADD CONSTRAINT [FK_TimeEntry_Task] FOREIGN KEY([TaskId]) REFERENCES [dbo].[Task] ([TaskId]) GO ALTER TABLE [dbo].[TimeEntry] CHECK CONSTRAINT [FK_TimeEntry_Task] GO SET NUMERIC_ROUNDABORT OFF GO SET XACT_ABORT, ANSI_PADDING, ANSI_WARNINGS, CONCAT_NULL_YIELDS_NULL, ARITHABORT, QUOTED_IDENTIFIER, ANSI_NULLS ON GO DECLARE @pv binary(16) BEGIN TRANSACTION SET IDENTITY_INSERT [dbo].[Task] OFF SET IDENTITY_INSERT [dbo].[Task] ON INSERT INTO [dbo].[Task] ([TaskId], [TaskName], [Description], [StartDate], [EndDate], [CustomerId], [ProjectId]) VALUES (1, N'Create Project', N'Create a Silverlight Application project with a RIA Services link', '20100601 00:00:00.000', '20100602 00:00:00.000', NULL, NULL) INSERT INTO [dbo].[Task] ([TaskId], [TaskName], [Description], [StartDate], [EndDate], [CustomerId], [ProjectId]) VALUES (2, N'Define Data Model', N'Create an Entity Framework model for the application data', '20100602 00:00:00.000', '20100603 00:00:00.000', NULL, NULL) INSERT INTO [dbo].[Task] ([TaskId], [TaskName], [Description], [StartDate], [EndDate], [CustomerId], [ProjectId]) VALUES (3, N'Define domain service', N'Create a domain service to expose task data to the client', '20100603 00:00:00.000', '20100604 00:00:00.000', NULL, NULL) INSERT INTO [dbo].[Task] ([TaskId], [TaskName], [Description], [StartDate], [EndDate], [CustomerId], [ProjectId]) VALUES (4, N'Use data in the Silverlight client', N'Use the DomainContext and DomainDataSource to access and manipulate the data in the client', '20100604 00:00:00.000', '20100605 00:00:00.000', NULL, NULL) SET IDENTITY_INSERT [dbo].[Task] OFF COMMIT TRANSACTION
ãã ãããã¡ã€ã³ã¢ãã«ãšã³ãã£ãã£ãäœæããåã«ãããŒã¿ããŒã¹ãäœæããŠããŒã¿ãåã蟌ãå¿
èŠããããŸãã
ãããè¡ãã«ã¯ããµãŒããŒåŽã«ãã©ã«ããŒãApp_Dataããè¿œå ããŸãïŒãã¬ãã£ãã¯ã¹.WebïŒã



äœæãããããŒã¿ããŒã¹ãDatabase * .mdfããããã«ã¯ãªãã¯ããŸãã ãŠã£ã³ããŠãéããŸãã ãããŒã¿ããŒã¹* .mdfãã§ãå³ãã¿ã³-ãæ°ãããªã¯ãšã¹ãããéžæããŸãã ã¯ãšãªãšãã£ã¿ãŒãéããŸãã æ¢ã«èšåãããŠããTasksModel.sqlãšããã®ãããªæåã®è¡ãé€ããã¹ãŠã®ã³ããŒãéããŸãã
USE [master] GO IF EXISTS (SELECT name FROM sys.databases WHERE name = N'TaskManager.mdf') DROP DATABASE [TaskManager.mdf] GO CREATE DATABASE [TaskManager.mdf] GO USE [TaskManager.mdf] GO
ãå®è¡ããã¿ã³ãã¯ãªãã¯ããŸãã ããã ãã§ã ããŒã¿ããŒã¹ã«ã¯ããŒãã«ãæ ŒçŽãããã¿ã¹ã¯ããŒãã«ã«ã¯ããŒã¿ãæ ŒçŽãããŸãã
TaskManager.Webãå³ã¯ãªãã¯ãã[è¿œå ]-[èŠçŽ ã®äœæ]ãéžæããŸãã å·ŠåŽã®ãŠã£ã³ããŠã§[ããŒã¿]ã¿ããéžæããå³åŽã§[ADO.NET EDMã¢ãã«]ãéžæããŸãã ã
TasksModel.edmx ããšããååãä»ããŸãã

è¿œå ããŸãã [EDMã¢ãã«ãŠã£ã¶ãŒã]ãã€ã¢ãã°ããã¯ã¹ãéããŸãã ç®çã®ããŒã¿ããŒã¹ãéžæãããšã³ãã£ãã£ã®ååã
TaskManagerEntities ããæå®ããŠãã次ãžããã¯ãªãã¯ããŸãã

次ã®ã¹ãããã§ãç®çãã®ä»ããããŒãã«ãéžæããŸãã ã¢ãã«ã®ååãã
TaskManagerMode lããšããããªããžã§ã¯ãåãè€æ°åœ¢ãŸãã¯åæ°åœ¢ã§
çæãããã«ãã§ãã¯ããŒã¯ãä»ããŸã

åºæ¥äžããã ããã§ãããŒã¿ããŒã¹å
ã®ãã¹ãŠã®ããŒãã«ã®Entity FrameworkããŒã¿ã¢ãã«ãäœæãããŸããã ãã ãããã®ã¬ãã¹ã³ã§ã¯ãã¿ã¹ã¯ãããŒãã«ã®ã¿ã䜿çšããŸãããããã«ããŒãã«ãè¿œå ããŸãã
ãœãªã¥ãŒã·ã§ã³ãæ§ç¯ããŠããã¹ãŠãæ£ããè¡ãããããšã確èªããŸãã
EDMã®äœæåŸããã¶ã€ããŒãŠã£ã³ããŠãéããŸãèªåçã«éããªãå Žåã¯ãTasksModel.edmxã®ãœãªã¥ãŒã·ã§ã³ãšã¯ã¹ãããŒã©ãŒãããã«ã¯ãªãã¯ããŸãã 次ã«ã空ã®é åãã¯ãªãã¯ããŸãã ãããŠãããããã£ãŠã£ã³ããŠã«ç§»åããŸãã ãã³ãŒãçææŠç¥ããã©ã¡ãŒã¿ãŒãããããããããããã©ã«ããã«å€æŽããŸãã åçµã¿ç«ãŠããŸãã

次ã«ããã¡ã€ã³ãµãŒãã¹ãäœæããŸãã
ã¹ããã3ïŒãã¡ã€ã³ãµãŒãã¹ãäœæãã
次ã«ãRIAãµãŒãã¹ã«ãŒãã«-ãã¡ã€ã³ãµãŒãã¹ãäœæããŸãããã ãµãŒããŒåŽãå³ã¯ãªãã¯ããŸãïŒTaskManager.Web-ãè¿œå ã-ãèŠçŽ ã®äœæãã å·ŠåŽã®ãŠã£ã³ããŠã§ãã«ããŽãªãWebããéžæããå³åŽã§ãDomainService ClassããéžæããŸãã ã
TasksDomainService ããšããååãä»ããŸãã

[è¿œå ]ãã¿ã³ãã¯ãªãã¯ããåŸããµãŒãã¹èšå®ãŠã£ã³ããŠã«ç§»åããŸãã ããããã¯ãã¿ã¹ã¯ããŒãã«ã§ã®ã¿äœæ¥ããããããããéžæããŸãã ãç·šéãæå¹ã«ãããåã§ã¯ããã§ãã¯ããŒã¯ã¯äžèŠã§ãã ãŸãã ããªããããã眮ããªããCRUDã®ã»ãããååŸããŸãã ããã§ãªãå Žåã¯ãGetïŒèªã¿åãïŒã®ã¿ã OKãã¯ãªãã¯ããŸãã
ã³ã¡ã³ããªãã§çæãããã³ãŒãã¯æ¬¡ã®ããã«ãªããŸãã
[EnableClientAccess()] public class TasksDomainService : LinqToEntitiesDomainService<TasksModelEntities> { public IQueryable<Task> GetTasks() { return this.ObjectContext.Tasks; } }
LinqToEntitiesDomainServiceã¯ã©ã¹ã¯ãEDMã¢ãã«ãšRIA WCFãµãŒãã¹éã®ãªã³ã¯ãæäŸããŸãã å±æ§ "EnableClientAccess"ã¯ãèªåã³ãŒãçæäžã«ãã®ã¡ãœãããã¯ã©ã€ã¢ã³ãããŒãã«è¿œå ããå¿
èŠãããããšã瀺ããŸãã ãã®å ŽåãããŒãã«ããããŒã¿ãèªã¿åãæ¹æ³ãããããŸããããå¿
èŠãªããŒã¿ã«å¯ŸããŠå®å
šãªCRUDãŸãã¯ãã®ä»ã®ã¢ã¯ã·ã§ã³ãå®è£
ã§ããæçµçã«ã¯ã¯ã©ã€ã¢ã³ããããžã§ã¯ãã§ã䜿çšã§ããŸãã ãããè¡ãæ¹æ³ã«ã€ããŠã¯ã次ã®èšäºã§è©³ããæ€èšããŸãã
ãŸããæ»ãå€ã®ã¿ã€ãïŒQueryableïŒããã³åœåèŠåïŒGetNameïŒã«é¢é£ããèŠåã䜿çšãããããšãå¿ããªãã§ãã ããã ãã®å ŽåãObjectContextããŒã¿ã¢ãã«ã®å§ä»»ããããšã³ãã£ãã£ããããŸããããã¯ãåºæ¬ã¯ã©ã¹ã®äžéšãšããŠäœæãããTasksããŒãã«å
šäœãååŸããããã«äœ¿çšãããŸãã 䞊ã¹æ¿ãããã£ã«ã¿ãŒãªã©ãè¿œå ããããšã§ãã®ã¯ãšãªãæ¹åããããšãã§ããŸãããæ»ãå€ã¯IQueryableåã§ãããWCF RIAãµãŒãã¹ã¯ãããç解ãããã®æ©èœãã¯ã©ã€ã¢ã³ãåŽã§äœ¿çšã§ããé©åãªã¡ãœããã圢æããŸãã
ãããžã§ã¯ããåæ§ç¯ããŠããã¹ãŠãæ£ããè¡ãããããã«ããŸãã ã¯ã©ã€ã¢ã³ããããžã§ã¯ãã§ã¯ã2ã€ã®ã·ãŒãã®ã¢ã€ã³ã³ããã¹ãŠã®ãã¡ã€ã«ã衚瀺ããã¯ãªãã¯ãããšãã¯ã©ã€ã¢ã³ãçšã«çæãããã³ãŒããå«ãTaskManager.Web.g.csãšããååã®ãã¡ã€ã«ã衚瀺ãããŸãã
ã¹ããã4ïŒDomainDataSourceã䜿çšããŠUIã§ããŒã¿ãååŸãã
ä»æ¥ã¯ãUIã§DomainDataSourceãçŽæ¥äœ¿çšããŠããã©ãã°ã¢ã³ããããããªã©ã®WCF RIAãµãŒãã¹ã®æ©èœãå©çšããŸãã 次ã®ããŒãã§ã¯ãMVVMãã¿ãŒã³ãWCF RIAã§ã®äœ¿çšæ¹æ³ãããã³ãã®ã¢ãããŒãã§DomainDataSourceã䜿çšããæ¹æ³ã«ã€ããŠã説æããŸãã
MainPage.xamlãéããŸãã 次ã«ã[ããŒã¿ãœãŒã¹]ãŠã£ã³ããŠãéããŸãã 次ã«ãã¿ã¹ã¯ãçœãããã¯ã¹ã®ã°ã©ãã£ã«ã«ããŒãžãšãã£ã¿ã«ãã©ãã°ã¢ã³ãããããããŸãã é
眮ãä¿®æ£ããŸãã ããã ãã§ã XAMLã»ã¯ã·ã§ã³ã«ãGridèŠçŽ ã®çæãããã³ãŒãã衚瀺ãããŸãã


ã¢ããªã±ãŒã·ã§ã³ããã«ãããŠå®è¡ããŸãã åæ§ã®ãã¥ãŒãã楜ãã¿ãã ããïŒ

ãã®ãã¥ãŒããªã¢ã«ã®ãããª
ãœãŒã¹ã³ãŒã
githubã§