۱۳۸۷/۱۲/۰۳

آشنايي با Oslo - قسمت دوم


قبل شروع اين قسمت بد نيست با يك سري از وبلاگ‌هاي اعضاي تيم Oslo آشنا شويم:


در ادامه‌ي مثال قسمت قبل، اكنون مي‌خواهيم entity جديدي به نام Project را به مدل اضافه كنيم:

//mschema to define a Project type
type Project
{
ProjectID : Integer64 = AutoNumber();
ProjectName : Text#25;
ConectionStringSource : Text;
ConectionStringDestination : Text;
DateCompared: DateTime;
Comment: Text?;
ProjectOwner: ApplicationUser;
} where identity ProjectID;

مطابق تعاريف فوق، فيلد ProjectOwner ارجاعي را به نوع ApplicationUser كه پيشتر ايجاد كرديم دارد. اكنون براي مشاهده‌ي تغييرات حاصل شده نياز به ايجاد يك جدول از روي اين نوع جديد است كه foreign key آن به صورت زير تعريف مي‌شود:

//this will define a SQL foreign key relationship
ProjectCollection : Project* where item.ProjectOwner in ApplicationUserCollection;

پس از افزودن اين سطر، Intellipad بلافاصله اسكريپت T-SQL آن‌را براي ما ايجاد مي‌كند كه به شرح زير است:

set xact_abort on;
go

begin transaction;
go

set ansi_nulls on;
go

create schema [Test1];
go

create table [Test1].[ApplicationUserCollection]
(
[UserID] bigint not null identity,
[FirstName] nvarchar(max) null,
[LastName] nvarchar(25) not null,
[Password] nvarchar(10) not null,
constraint [PK_ApplicationUserCollection] primary key clustered ([UserID])
);
go

create table [Test1].[ProjectCollection]
(
[ProjectID] bigint not null identity,
[Comment] nvarchar(max) null,
[ConectionStringDestination] nvarchar(max) not null,
[ConectionStringSource] nvarchar(max) not null,
[DateCompared] datetime2 not null,
[ProjectName] nvarchar(25) not null,
[ProjectOwner] bigint not null,
constraint [PK_ProjectCollection] primary key clustered ([ProjectID]),
constraint [FK_ProjectCollection_ProjectOwner_Test1_ApplicationUserCollection] foreign key ([ProjectOwner]) references [Test1].[ApplicationUserCollection] ([UserID])
);
go

insert into [Test1].[ApplicationUserCollection] ([FirstName], [LastName], [Password])
values (N'user1', N'name1', N'1@34')
;

insert into [Test1].[ApplicationUserCollection] ([FirstName], [LastName], [Password])
values (N'user2', N'name2', N'123@4')
;

insert into [Test1].[ApplicationUserCollection] ([FirstName], [LastName], [Password])
values (N'user3', N'name3', N'56#2')
;

insert into [Test1].[ApplicationUserCollection] ([FirstName], [LastName], [Password])
values (N'user4', N'name4', N'789@5')
;
go

commit transaction;

Go

همانطور كه ملاحظه‌ مي‌كنيد، هنگام كار كردن با يك مدل، نگهداري و توسعه‌ي آن واقعا ساده‌تر است از ايجاد اين دستورات T-SQL .

نكته:
جهت آشنايي با انواع داده‌هاي مجاز در زبان M مي‌توان به مستندات رسمي آن مراجعه نمود:
The "Oslo" Modeling Language Specification

اكنون قصد داريم همانند مثال قسمت قبل، تعدادي ركورد آزمايشي را براي اين جدول تعريف كنيم:

ProjectCollection
{
Project1{
ProjectName = "My Project 1",
ConectionStringSource = "Data Source=.;Initial Catalog=MyDB1;Integrated Security=True;",
ConectionStringDestination = "Data Source=.;Initial Catalog=MyDB2;Integrated Security=True;",
Comment="Project Comment",
DateCompared=2009-01-01T00:00:00,
ProjectOwner=ApplicationUserCollection.User1 //direct ref to User1 (FK)
},
Project2{
ProjectName = "My Project 2",
ConectionStringSource = "Data Source=.;Initial Catalog=MyDB1;Integrated Security=True;",
ConectionStringDestination = "Data Source=.;Initial Catalog=MyDB2;Integrated Security=True;",
Comment="Project Comment",
DateCompared=2009-01-01T00:00:00,
ProjectOwner=ApplicationUserCollection.User2 //direct ref to User2 (FK)
}

}

چون بين ProjectOwner و ApplicationUserCollection رابطه ايجاد كرده‌ايم، هنگام استفاده از آن‌ها، برنامه Intellipad جهت سهولت كار، IntelliSense مربوطه را نيز نمايش خواهد داد :


ادامه دارد ...