linq-to-sql – 为什么我的DataContext不会使用SQL Server Compa
发布时间:2020-12-12 07:00:22 所属栏目:MsSql教程 来源:网络整理
导读:我正在玩 SQL Server Compact Edition 4 CTP1,因为我想将它用作低流量网络应用的数据存储.当我尝试使用指定System.Data.SqlServerCe.4.0的连接字符串创建DataContext时(为了使用LINQ To SQL),我收到以下错误消息: Cannot open '|DataDirectory|data.sdf'. P
我正在玩
SQL Server Compact Edition 4 CTP1,因为我想将它用作低流量网络应用的数据存储.当我尝试使用指定System.Data.SqlServerCe.4.0的连接字符串创建DataContext时(为了使用LINQ To SQL),我收到以下错误消息:
Cannot open '|DataDirectory|data.sdf'. Provider 'System.Data.SqlServerCe.3.5' not installed. 那么为什么我的代码不使用SQL CE的第4版? 背景故事:我正在使用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. 如何强制我的应用使用正确的版本?有人可以帮忙吗? 解决方法SQL Server Compact 4.0不支持LINQ to SQL,只有Entity Framework / LINQ to Entities.但是如果你将版本4 SqlCeConnection传递给DataContext构造函数,它实际上会工作!(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |