Я играю с SQL Server Compact Edition 4 CTP1 , поскольку я хотел бы использовать его в качестве хранилища данных для веб-приложения с низким трафиком.Когда я пытаюсь создать DataContext
со строкой подключения, указывающей System.Data.SqlServerCe.4.0
(для использования LINQ To SQL), я получаю следующее сообщение об ошибке:
Cannot open '|DataDirectory|\data.sdf'. Provider 'System.Data.SqlServerCe.3.5' not installed.
Так почему мой код не используетверсия 4 SQL CE?
История вопроса: я использую Visual Web Developer Express 2010 для разработки, но я скачал бета-версию WebMatrix и использовал ее конструктор для создания файла SQL CE 4 .sdf
, содержащего некоторый тестданные.
Используя классы SqlCeConnection/SqlCeCommand/SqlCeDataReader
, я успешно создал базовое приложение MVC, которое извлекает тестовые данные и отображает их.Двоичные файлы SQL CE 4 копируются в папку 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" />
Это прекрасно работает , поэтому я знаю, что строка подключенияправильно, что я правильно установил двоичные файлы и т. д. Поэтому я решил попробовать немного LINQ To SQL, вот как я хочу создать настоящее приложение:
[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.
Как заставить мое приложение использовать правильную версию?Кто-нибудь может помочь?