トラフィックの少ないWebアプリのデータストアとして使用したいので、 SQL Server Compact Edition4CTP1で遊んでいます。DataContext
(LINQ To SQLを使用するために)接続文字列を指定してを作成しようとするとSystem.Data.SqlServerCe.4.0
、次のエラーメッセージが表示されます。
Cannot open '|DataDirectory|\data.sdf'. Provider 'System.Data.SqlServerCe.3.5' not installed.
では、なぜ私のコードはバージョン4のSQL CEを使用していないのですか?
バックストーリー:開発にVisual Web Developer Express 2010を使用していますが、WebMatrixベータ版をダウンロードし、そのデザイナーを使用して、.sdf
テストデータを含むSQLCE4ファイルを作成しました。
クラスを使用してSqlCeConnection/SqlCeCommand/SqlCeDataReader
、テストデータを取得して表示する基本的なMVCアプリを正常に作成しました。SQLCE4バイナリがアプリのbin
フォルダーにコピーされます。私のコントローラーでは:
var connectionString = ConfigurationManager.ConnectionStrings["Main"].ConnectionString;
var tmp = new Dictionary<string, string>();
using(var conn = new SqlCeConnection(connectionString))
{
conn.Open();
using (SqlCeDataReader r = new SqlCeCommand("select * from ttest", conn).ExecuteReader())
{
while (r.Read())
{
tmp.Add(r["id"].ToString(), r["name"].ToString());
}
}
}
return View(new TestViewModel {
Items = tmp
});
の接続文字列Web.config
は次のとおりです。
<add name="Main" connectionString="Data Source=|DataDirectory|\data.sdf" providerName="System.Data.SqlServerCe.4.0" />
これは完全に機能するので、接続文字列が正しく、バイナリを適切に設定したことなどがわかります。そこで、実際のアプリを作成する方法として、LINQToSQLを少し試してみようと思いました。 :
[Table(Name = "tTest")]
public class TestEntity
{
[Column(IsPrimaryKey = true, IsDbGenerated = true)]
public int ID { get; set; }
[Column]
public string Name { get; set; }
}
public class Repository
{
private Table<TestEntity> testTable;
public Repository()
{
var connectionString = ConfigurationManager.ConnectionStrings["Main"].ConnectionString;
var context = new DataContext(connectionString);
testTable = context.GetTable<TestEntity>();
}
public IQueryable<TestEntity> TestEntities
{
get { return testTable; }
}
}
そして、コントローラーで(コントローラーコンストラクターで構築されます)db
:Repository
var tmp = db.TestEntities.ToDictionary(x => x.ID.ToString(), x => x.Name);
return View(new TestViewModel {
Items = tmp
});
しかし、このコードを使用してページを表示すると、前述のエラーが発生します。
Cannot open '|DataDirectory|\data.sdf'. Provider 'System.Data.SqlServerCe.3.5' not installed.
アプリに正しいバージョンを使用させるにはどうすればよいですか?誰か助けてもらえますか?