【发布时间】:2013-10-13 12:24:13
【问题描述】:
我正在使用 SQL Server CE 4.0 开发 ASP.NET 网页站点。
我相信我的 SQL Server CE 4.0 数据库运行良好。无论有没有实体框架,我都可以在我的开发机器上毫无问题地连接到它。
一旦我将站点推送到服务器,我可以在没有实体框架的情况下使用此连接字符串很好地连接到它:
<add name="StarterSite"
connectionString="Data Source=|DataDirectory|\StarterSite.sdf"
providerName="System.Data.SqlServerCe.4.0" />
我的实体框架连接字符串如下所示:
<add name="StarterSiteEntities"
connectionString="metadata=res://*/App_Code.ProductModel.csdl|res://*/App_Code.ProductModel.ssdl|res://*/App_Code.ProductModel.msl;provider=System.Data.SqlServerCe.4.0;provider connection string="data source=|DataDirectory|\StarterSite.sdf""
providerName="System.Data.EntityClient" />
当我尝试进行任何 EF 数据库调用时,我会收到以下错误消息:
“/”应用程序中的服务器错误。
指定的架构无效。
错误:
App_Code.ProductModel.ssdl(2,88):错误 0004:无法加载 System.Data.SqlServerCe.Entity.dll。重新安装 SQL Server Compact。说明:在执行当前 Web 请求期间发生未处理的异常。请查看堆栈跟踪以获取有关错误及其源自代码的位置的更多信息。
异常详细信息:System.Data.MetadataException:指定的架构无效。
错误:
App_Code.ProductModel.ssdl(2,88):错误 0004:无法加载 System.Data.SqlServerCe.Entity.dll。重新安装 SQL Server Compact。来源错误:
第 23 行:使用 (var db = new StarterSiteEntities())
第 24 行:{
第 25 行:product =(来自 db.Products 中的 p
第 26 行:其中 p.ProductID == productId
第 27 行:选择 p).FirstOrDefault();源文件:c:\sites\www.foosite.org\Admin-RUF\Admin-Product-Edit.cshtml 行:25
堆栈跟踪:
[MetadataException:指定的架构无效。错误:
App_Code.ProductModel.ssdl(2,88):错误 0004:无法加载 System.Data.SqlServerCe.Entity.dll。重新安装 SQL Server Compact。 ]
System.Data.Metadata.Edm.Loader.ThrowOnNonWarningErrors() +8610213
System.Data.Metadata.Edm.Loader.LoadItems(IEnumerable1 xmlReaders, IEnumerable1 sourceFilePaths) +189
System.Data.Metadata.Edm.StoreItemCollection.Init(IEnumerable1 xmlReaders, IEnumerable1 filePaths, Boolean throwOnError, DbProviderManifest& providerManifest, DbProviderFactory& providerFactory, String& providerManifestToken, Memoizer2& cachedCTypeFunction) +182
System.Data.Metadata.Edm.StoreItemCollection..ctor(IEnumerable1 xmlReaders, IEnumerable1 filePaths) +244
System.Data.Metadata.Edm.StoreMetadataEntry.LoadStoreCollection(EdmItemCollection edmItemCollection, MetadataArtifactLoader loader) +90
System.Data.Metadata.Edm.StoreItemCollectionLoader.LoadItemCollection(StoreMetadataEntry entry) +16
System.Data.Metadata.Edm.MetadataCache.LoadItemCollection(IItemCollectionLoader1 itemCollectionLoader, T entry) +163
System.Data.Metadata.Edm.MetadataCache.GetOrCreateStoreAndMappingItemCollections(String cacheKey, MetadataArtifactLoader loader, EdmItemCollection edmItemCollection, Object& entryToken) +191
System.Data.EntityClient.EntityConnection.LoadStoreItemCollections(MetadataWorkspace 工作区,DbConnection storeConnection,DbProviderFactory 工厂,DbConnectionOptions connectionOptions,EdmItemCollection edmItemCollection,MetadataArtifactLoader artifactLoader)+246
System.Data.EntityClient.EntityConnection.GetMetadataWorkspace(布尔初始化所有集合)+586
System.Data.EntityClient.EntityConnection.InitializeMetadata(DbConnection newConnection, DbConnection originalConnection, Boolean closeOriginalConnectionOnFailure) +75
System.Data.EntityClient.EntityConnection.Open() +150
System.Data.Objects.ObjectContext.EnsureConnection() +75
System.Data.Objects.ObjectQuery1.GetResults(Nullable1 forMergeOption) +41
System.Data.Objects.ObjectQuery1.System.Collections.Generic.IEnumerable<T>.GetEnumerator() +36
System.Linq.Enumerable.FirstOrDefault(IEnumerable1 来源)+152
System.Data.Objects.ELinq.ObjectQueryProvider.b__1(IEnumerable1 sequence) +41
System.Data.Objects.ELinq.ObjectQueryProvider.ExecuteSingle(IEnumerable1 查询,表达式 queryRoot)+59
System.Data.Objects.ELinq.ObjectQueryProvider.System.Linq.IQueryProvider.Execute(表达式表达式)+133
System.Data.Entity.Internal.Linq.DbQueryProvider.Execute(表达式表达式)+87
System.Linq.Queryable.FirstOrDefault(IQueryable1 source) +251
ASP._Page_admin_ruf_Admin_Product_Edit_cshtml.Execute() in c:\sites\www.foosite.org\Admin-RUF\Admin-Product-Edit.cshtml:25
System.Web.WebPages.WebPageBase.ExecutePageHierarchy() +198
System.Web.WebPages.WebPage.ExecutePageHierarchy(IEnumerable1 执行者) +69
System.Web.WebPages.WebPage.ExecutePageHierarchy() +131
System.Web.WebPages.StartPage.RunPage() +17
System.Web.WebPages.StartPage.ExecutePageHierarchy() +64
System.Web.WebPages.WebPageBase.ExecutePageHierarchy(WebPageContext pageContext, TextWriter writer, WebPageRenderingBase startPage) +78
System.Web.WebPages.WebPageHttpHandler.ProcessRequestInternal(HttpContextBase httpContext) +116
版本信息:Microsoft .NET Framework 版本:4.0.30319; ASP.NET 版本:4.0.30319.18044
我做错了什么?
【问题讨论】:
-
尝试转到 VS 的 SQL 选项卡并复制和粘贴连接字符串。
-
使用您的应用部署 System.Data.SqlServerCe.Entity.dll
-
@ErikEJ 谢谢回复。我在哪里可以找到 System.Data.SqlServerCe.Entity.dll 来部署它?它不在我的 bin 文件夹中。
-
它在我的电脑上的 C:\Program Files (x86)\Microsoft SQL Server Compact Edition\v4.0\Desktop\System.Data.SqlServerCe.Entity 中
-
@ErikEJ 这解决了问题。谢谢!!!
标签: c# entity-framework sql-server-ce asp.net-webpages