7

トラフィックの少ない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;  }
    }
}

そして、コントローラーで(コントローラーコンストラクターで構築されます)dbRepository

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.

アプリに正しいバージョンを使用させるにはどうすればよいですか?誰か助けてもらえますか?

4

1 に答える 1

7

LINQ to SQLは、SQL Server Compact 4.0ではサポートされておらず、Entity Framework / LINQtoEntitiesでのみサポートされています。ただし、バージョン4のSqlCeConnectionをDataContextコンストラクターに渡すと、実際に機能します。

于 2010-12-04T12:41:49.720 に答える