SQL Server Compact 3.5 を利用するアプリでの DB 構築と項目の追加(その1)

Visual C# 2010 Express でデスクトップ用の DB を利用したアプリケーションを構築することを考えると、SQL Server Compact 3.5 を使うことを考えますよね。でも、開発と運用が同じパソコンであれば何も考えずに作れますけど、運用は別のパソコンでとか、せっかく作るんだから他の人にも使ってもらおうとか考えると、DB の構築をどうするかとか、機能の拡張の際の DB 上の項目の追加をどうするかとか考えないといけません。ってことで、ちょっと試しに作ってみたものを書いてみます。

まずは全体の方針をどうするかということですが、できるだけお気楽になるほうがいいよね、ということで、

  • アプリケーション起動時に DB が無かったら最新のフォーマットの DB を作成する
  • アプリケーション起動時に DB のフォーマットが対象とするものより古かったら DB 項目の操作を行い最新のフォーマットにする

ということにします。この方針を実現するためには、

  • DB のフォーマットのバージョン管理を行うことが必要
  • DB のフォーマットの変更を行う際に、追加する項目、削除する項目(単純に不要な項目なのか、別項目へ何らかの方法でデータの引き継ぎがあるのか)を整理して、DB 項目の操作を行う機能を実現することが必要

ということになります。

DB の操作は次のようにします。

  • DB 及びテーブルの作成とテーブル上の項目の追加削除は SQL を利用する
  • DB 上のデータ操作は LINQ を介して行う

で、LINQ ですがふつ~に LINQ to Entity を使ってみたらデータ更新でエラーが発生します。

調べてみたら、次の情報が。。。

Entity Framework では、サーバーで生成されたキーや値を持つエンティティの種類を定義できますが、SQL Server Compact では、Entity Framework と共に使用する場合、サーバーで生成されたキーや値を持つエンティティはサポートされません。サーバーで生成された値を持つエンティティに対してデータ操作を実行すると、”サポートされていない” という内容の例外がスローされます。

Entity Framework (SQL Server Compact)

SQL Server Compact 4.0 の解説には「SQL Server Compact 4.0 では、Entity Framework と共に使用し、キーの種類が ID 列である場合にのみ、サーバーで生成されたキーや値を持つエンティティがサポートされます。(Entity Framework (SQL Server Compact))」と書かれているので、Compact 3.5 の制限事項ですね。。。とはいえ、Visual C# 2010 Express では SQL Server Compact 4.0 は使えないですし、ID の生成を手動で行うのはね。。。ということで、LINQ to SQL を使うことになります(一昨日(6月8日)に Visual Studio Engineering Term のブログに「Visual Studio Express 2012 for Windows Desktop を提供することになった」との記事(Visual Studio Express 2012 for Windows Desktop)が掲載されたので、C# Express でも SQL Server Compact 4.0 が使えるようになるかもしれませんね)。

Visual Studio Express 2012 for Windows Desktop で Entity Framework code first と SQL Server Compact 4.0 を利用して DB への項目追加を行う記事を書きました(2013/06/16 追記)。

DB の構成は次のようにします。

テーブル名: Manages

列名 データ型 Null を許容 備考
ManageId int 主キー
ID 列
DataVersion nvarvhar(10) DB フォーマットのバージョン

テーブル名: Customers

列名 データ型 Null を許容 備考
CustomerId int 主キー
ID 列
CustomerName nvarvhar(50) 顧客名

テーブル名: Products

列名 データ型 Null を許容 備考
ProductId int 主キー
ID 列
ProductName nvarvhar(50) 製品名

テーブル名: Sales

列名 データ型 Null を許容 備考
SaleId int 主キー
ID 列
CustomerId int Customers テーブルへの外部キー
ProductId int Products テーブルへの外部キー
Quantity int 販売数量

開発は次の手順になります。

  1. 初期 DB 作成部分を作る
  2. 作成した DB から dbml ファイルを生成し、プロジェクトに追加する
  3. LINQ to SQL を用いてアプリケーションを構築する
  4. DB の構成変更部分を作る
  5. DBML ファイルをプロジェクトから削除した後、構成変更した DB から dbml ファイルを生成し、プロジェクトに追加する
  6. 機能追加のコードを実装する

テスト用の画面はこんな感じにします。

ということで、方針が決まったので、(その2)でコードを書いていきます。


SQL Server Compact 3.5 を利用するアプリでの DB 構築と項目の追加(その1)」への2件のフィードバック

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です