ホーム > LightSwitch, Silverlight > LightSwitchの裏側を探る 2:テーブルスキーマの作成

LightSwitchの裏側を探る 2:テーブルスキーマの作成

LightSwitchでは、まずデータの定義をすることになりますが、その前にアプリケーション全体のプロパティの設定を確認しました。

Cultureの設定の標準は英語(米国)になっていたので、Japaneseにします。
Cultureの設定

また、アプリケーションのタイプのデフォルトが2-tierだったので、3-tierにしました。
3-tierの設定

このように設定を変更したうえで、テーブル定義を日本語を使って行ってみました。
テーブル追加

定義した内容はとりあえずこの画面で見えてるとおり。
まだプロパティを使って何か設定とかはしていない状態です。

このような設定をしたところ、アプリケーションのルートフォルダ直下のBin\Dataフォルダに「SchemaChange.xml」ファイルが作成されました。
このファイルの内容は以下のようになっていました。

———————————————————————————————————-

<?xml version="1.0" encoding="utf-8"?>
<ApplicationSchemaChange xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance&quot; xmlns:xsd="http://www.w3.org/2001/XMLSchema"&gt;
  <EntityChanges>
    <EntitySchemaChange IsNew="true" OriginalName="会員テーブルSet">
      <PropertyChanges />
    </EntitySchemaChange>
  </EntityChanges>
</ApplicationSchemaChange>

———————————————————————————————————-

また、アプリケーションのルートフォルダ直下のDataフォルダ内のApplicationDefinition.lsmlの内容が次のように書き換えられました。

———————————————————————————————————-

<?xml version="1.0" encoding="utf-8" ?>
<ModelFragment xmlns="http://schemas.microsoft.com/LightSwitch/2010/xaml/model&quot;
               xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"&gt;
  <Application Name="Application1"
                         Version="1.0.0.0"
                         DefaultNavigationItem="Application1:/NavigationItems[Tasks]"
                         Shell="Microsoft.LightSwitch:Standard"
                         Theme="Microsoft.LightSwitch:Blue">
    <Application.NavigationItems>
      <ApplicationNavigationGroup Name="Tasks">
        <ApplicationNavigationGroup.Attributes>
          <DisplayName Value="Tasks" />
        </ApplicationNavigationGroup.Attributes>
      </ApplicationNavigationGroup>
      <ApplicationNavigationGroup Name="Administration">
        <ApplicationNavigationGroup.Attributes>
          <DisplayName Value="Administration" />
        </ApplicationNavigationGroup.Attributes>
        <ApplicationNavigationLink Command="Microsoft.LightSwitch.Security:/Commands[ScreenCommandShowUsersScreen]"
                                   Name="UsersScreen" />
        <ApplicationNavigationLink Command="Microsoft.LightSwitch.Security:/Commands[ScreenCommandShowRolesScreen]"
                                   Name="RolesScreen" />
      </ApplicationNavigationGroup>
    </Application.NavigationItems>
    <Application.References>
      <ModuleReference Module="Microsoft.LightSwitch.Security" />
            <ModuleReference Module="Microsoft.LightSwitch.Extensions" />
        </Application.References>
  </Application>

  <EntityContainerGroup Name="DataWorkspace">
    <EntityContainerGroupProperty EntityContainer="Microsoft.LightSwitch.Security:SecurityDataService"
                             Name="SecurityDataService">
      <EntityContainerGroupProperty.Attributes>
        <Generated />
        <DisplayName Value="Security Data Service" />
        <Description Value="Service that provides access to security-related data." />
      </EntityContainerGroupProperty.Attributes>
    </EntityContainerGroupProperty>
        <EntityContainerGroupProperty EntityContainer="Application1:ApplicationData"
                                      Name="ApplicationData" />
    </EntityContainerGroup>
    <EntityContainer IsIntrinsic="True"
                     Name="ApplicationData">
        <SubmitOperation Name="SaveChanges" />
        <EntitySet CanDelete="True"
                   CanInsert="True"
                   CanUpdate="True"
                   EntityType="Application1:会員テーブル"
                   Name="会員テーブルSet" />
        <QueryOperation Name="会員テーブルSet_Single"
                        ReturnType="Application1:会員テーブル">
            <QueryOperation.Attributes>
                <Generated />
                <Description Value="Returns the entity whose identity is specified by the parameter(s)." />
            </QueryOperation.Attributes>
            <QueryOperation.FilterExpression>
                <QueryFilterExpressionTree>
                    <BinaryExpression NodeType="Equal">
                        <BinaryExpression.Left>
                            <ChainExpression NodeType="Chain">
                                <MemberExpression Member="Application1:会員テーブル/Properties[Id]"
                                                  NodeType="MemberAccess" />
                            </ChainExpression>
                        </BinaryExpression.Left>
                        <BinaryExpression.Right>
                            <ParameterExpression NodeType="Parameter"
                                                 Parameter="Application1:ApplicationData/Members[会員テーブルSet_Single]/Parameters[Id]" />
                        </BinaryExpression.Right>
                    </BinaryExpression>
                </QueryFilterExpressionTree>
            </QueryOperation.FilterExpression>
            <QueryOperation.Source>
                <QuerySourceExpressionTree>
                    <MemberExpression Member="Application1:ApplicationData/Members[会員テーブルSet]"
                                      NodeType="MemberAccess" />
                </QuerySourceExpressionTree>
            </QueryOperation.Source>
            <QueryOperationParameter Name="Id"
                                     ParameterType="Microsoft.LightSwitch:Int32?">
                <QueryOperationParameter.Attributes>
                    <Description Value="The value of the ‘Id’ key property of the entity to retrieve." />
                </QueryOperationParameter.Attributes>
            </QueryOperationParameter>
        </QueryOperation>
        <QueryOperation Name="会員テーブルSet_SingleOrDefault"
                        ReturnType="Application1:会員テーブル">
            <QueryOperation.Attributes>
                <Generated />
                <Description Value="Returns the entity whose identity is specified by the parameter(s) or null if no such entity exists." />
            </QueryOperation.Attributes>
            <QueryOperation.FilterExpression>
                <QueryFilterExpressionTree>
                    <BinaryExpression NodeType="Equal">
                        <BinaryExpression.Left>
                            <ChainExpression NodeType="Chain">
                                <MemberExpression Member="Application1:会員テーブル/Properties[Id]"
                                                  NodeType="MemberAccess" />
                            </ChainExpression>
                        </BinaryExpression.Left>
                        <BinaryExpression.Right>
                            <ParameterExpression NodeType="Parameter"
                                                 Parameter="Application1:ApplicationData/Members[会員テーブルSet_SingleOrDefault]/Parameters[Id]" />
                        </BinaryExpression.Right>
                    </BinaryExpression>
                </QueryFilterExpressionTree>
            </QueryOperation.FilterExpression>
            <QueryOperation.Source>
                <QuerySourceExpressionTree>
                    <MemberExpression Member="Application1:ApplicationData/Members[会員テーブルSet]"
                                      NodeType="MemberAccess" />
                </QuerySourceExpressionTree>
            </QueryOperation.Source>
            <QueryOperationParameter Name="Id"
                                     ParameterType="Microsoft.LightSwitch:Int32?">
                <QueryOperationParameter.Attributes>
                    <Description Value="The value of the ‘Id’ key property of the entity to retrieve." />
                </QueryOperationParameter.Attributes>
            </QueryOperationParameter>
        </QueryOperation>
        <QueryOperation Name="会員テーブルSet_All"
                        ReturnType="Application1:会員テーブル*">
            <QueryOperation.Attributes>
                <Generated />
                <Description Value="Returns all entities contained in the entity set." />
            </QueryOperation.Attributes>
            <QueryOperation.Source>
                <QuerySourceExpressionTree>
                    <MemberExpression Member="Application1:ApplicationData/Members[会員テーブルSet]"
                                      NodeType="MemberAccess" />
                </QuerySourceExpressionTree>
            </QueryOperation.Source>
        </QueryOperation>
    </EntityContainer>
    <DataService DataProvider="EntityFrameworkDataProvider"
                 EntityContainer="Application1:ApplicationData"
                 Name="ApplicationDataMapping" />
    <EntityType Name="会員テーブル">
        <EntityType.Methods>
            <EntityMethod Name="Delete">
                <EntityMethod.Attributes>
                    <Generated />
                </EntityMethod.Attributes>
            </EntityMethod>
        </EntityType.Methods>
        <EntityType.Properties>
            <KeyProperty Name="Id"
                         PropertyType="Microsoft.LightSwitch:Int32">
                <KeyProperty.Attributes>
                    <Required />
                    <NotSearchable />
                </KeyProperty.Attributes>
            </KeyProperty>
            <EntityProperty Name="会員名"
                            PropertyType="Microsoft.LightSwitch:String?">
                <EntityProperty.Attributes>
                    <MaxLength Value="255" />
                </EntityProperty.Attributes>
            </EntityProperty>
            <EntityProperty Name="メールアドレス"
                            PropertyType="Microsoft.LightSwitch.Extensions:EmailAddress">
                <EntityProperty.Attributes>
                    <Required />
                    <MaxLength Value="255" />
                    <EmailAddressValidation DomainRequired="True" />
                </EntityProperty.Attributes>
            </EntityProperty>
            <EntityProperty Name="性別"
                            PropertyType="Microsoft.LightSwitch:Int32">
                <EntityProperty.Attributes>
                    <Required />
                    <NotSearchable />
                </EntityProperty.Attributes>
            </EntityProperty>
            <EntityProperty Name="誕生日"
                            PropertyType="Microsoft.LightSwitch:Date">
                <EntityProperty.Attributes>
                    <Required />
                    <NotSearchable />
                    <Range Maximum="12/31/9999"
                           Minimum="01/01/1753" />
                </EntityProperty.Attributes>
            </EntityProperty>
        </EntityType.Properties>
    </EntityType>
</ModelFragment>

———————————————————————————————————-

どうやら画面上から定義した内容は、このApplicationDefinition.lsmlファイルに展開されるようですね。

ちなみに、この状態でBin\Data\Tempに存在しているApplicationDatabase.mdf(データベースファイル)の中をみると、ASP.NETで使っているようなメンバーシップのためのテーブルやビュー、ストアドプロシージャーは存在していますが、定義した会員テーブルは存在していません。
データベース内テーブル

テーブルがどのタイミングで追加されるのか、気になりますが、とりあえずはここまで。

カテゴリー:LightSwitch, Silverlight
  1. まだコメントはありません。
  1. No trackbacks yet.

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中

%d人のブロガーが「いいね」をつけました。