SIN@SAPPOROWORKSの覚書

C#を中心に、夜な夜な試行錯誤したコードの記録です。

Windows Azure の Web Sites で SQLServerCompactを使用する

SqlServerCompactは、ファイルベースのSQLサーバであり、小規模なDBとして、とても手軽に利用できます。

先日公開されていました、@jsakamoto氏の記事(※1)にありましたGitHub に Web アプリのソースを公開しておき、このアプリを独自に自分で立てたい人は、このソースを Azure Web Sites に送り込むだけで、データベースの設定とか不要でワンタッチでオレ専用アプリを立ち上げることができるようになる。」に非常に興味が湧き、SQLCompactをWeb Sitesにデプロイして特に支障なく使用できることが確認できたので、その手順を記録しておきたいと思います。(すいませんが、あくまで個人的な簡単な検証です)

ちなみに、結論としては、パッケージマネージャ・コンソールでプロジェクトへ追加する際に、「SqlServerCompact」ではなく、「EntityFramework.SqlServerCompact」を使用することと、データを書き込むアクセス権が必要というだけでした。

(このアクセス権の付与に関しては、当初の「clone・pushで即実行」から、やや逸脱しているので、もっといい方法を見つける必要がありそうです。)
2013/12/04 追記: 文末に対処を追記しました。


PM>install-Package EntityFramework.SqlServerCompact

手順は、VS2013 + .NET4.51 (MCV5) で記載されていますが、.NET4.0 (MVC4)や、VS2012でも問題なく動作を確認できました。

※1@jsakamoto 「EntityFramework"Code First"で、まともに使えるファイルベースのデータベースエンジンはSQLServer CEのみ?」

1 MVC5のプロジェクトの作成

「ファイル」−「新規作成」−「プロジェクト」で「.NET Framework4.5.1」を選択した状態で「ASP.NET Webプリケーション」を選択します。「テンプレートの選択」は「MVC」を選択します。

001

002

※「.NET Framework 4.5」が選択されている場合、プロジェクトはMVC5、「.NET Framework4.0」の場合は、MVC4になります。

2 EntityFramework.SqlServerCompactのインストール

パッケージマネージャコンソールからEntityFramework.SqlServerCompactをインストールします。
2013.12.02現在、最新として、EntityFramework.SqlServerCompactは、Ver6.0.1がインストールされ、依存関係からEntityFrameworkもVer6.0.0からVer6.0.1となりました。


PM> Install-Package EntityFramework.SqlServerCompact
****** 一部略しています ********
'EntityFramework 6.0.0' が SqlCeSample から正常に削除されました。
'EntityFramework 6.0.1' が SqlCeSample に正常に追加されました。
'EntityFramework.SqlServerCompact 6.0.1' が SqlCeSample に正常に追加されました。

参照設定に追加されていることを確認できます。

003

※MVC4では、EF5までしかスキャフォールディングが使用できません。
「EntityFramework.SqlServerCompact」をバージョン指定でインストールすることで、依存関係でEFがVer6になることを防ぐことができます。
PM>install-package EntityFramework.SqlServerCompact –Version 4.3.1

016

3 スキャフォールディング

Modelクラスの作成

元クラスとして、Id(主キー)とName(名前)だけのUser「クラス」を作成しました。
「Models」フォルダを右クリックして「追加」-「クラス」とたどり、クラス名に「User」を指定します。クラスの定義が終わったら、スキャフィールディングで認識できるように、一度コンパイルしておきます。

004

スキャフォールディング

「Controllers」のフォルダを右クリックして「追加」-「コントローラ」とたどり、「コントローラの追加」「Entity Framework を使用した、ビューがあるMVC5コントローラ」を選択します。
コントローラ「UserController」、モデルクラス「User」、データコンテキスト「SqlCeSampleContext」を指定しました。
スキャフォールディングで、今、作成したクラス「User」を操作するための一通りのアクション及びビューが一気に作成されます。(Index「一覧」、Create「作成」、Edit「編集」、Delete「削除」、Detail「詳細」)

005

006

データベースのイニシャライズ

続いてモデルの修正時にデータベースを再構築するように、Global.aspx.csのApplication_Start()にもDatabase.SetInitializerを追加しました。

[csharp highlight="4"]
public class MvcApplication : System.Web.HttpApplication{
protected void Application_Start(){

Database.SetInitializer(new DropCreateDatabaseIfModelChanges());

AreaRegistration.RegisterAllAreas();
FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
RouteConfig.RegisterRoutes(RouteTable.Routes);
BundleConfig.RegisterBundles(BundleTable.Bundles);
}
|