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 の構成は次のようにします。
列名 | データ型 | Null を許容 | 備考 |
---|---|---|---|
ManageId | int | 主キー ID 列 |
|
DataVersion | nvarvhar(10) | DB フォーマットのバージョン |
列名 | データ型 | Null を許容 | 備考 |
---|---|---|---|
CustomerId | int | 主キー ID 列 |
|
CustomerName | nvarvhar(50) | 顧客名 |
列名 | データ型 | Null を許容 | 備考 |
---|---|---|---|
ProductId | int | 主キー ID 列 |
|
ProductName | nvarvhar(50) | 製品名 |
列名 | データ型 | Null を許容 | 備考 |
---|---|---|---|
SaleId | int | 主キー ID 列 |
|
CustomerId | int | Customers テーブルへの外部キー | |
ProductId | int | Products テーブルへの外部キー | |
Quantity | int | 販売数量 |
開発は次の手順になります。
- 初期 DB 作成部分を作る
- 作成した DB から dbml ファイルを生成し、プロジェクトに追加する
- LINQ to SQL を用いてアプリケーションを構築する
- DB の構成変更部分を作る
- DBML ファイルをプロジェクトから削除した後、構成変更した DB から dbml ファイルを生成し、プロジェクトに追加する
- 機能追加のコードを実装する
ということで、方針が決まったので、(その2)でコードを書いていきます。
「SQL Server Compact 3.5 を利用するアプリでの DB 構築と項目の追加(その1)」への2件のフィードバック