![](/img/trans.png)
[英]Self-hosted WCF service: How to access the object(s) implementing the service contract from the hosting application?
[英]What's the proper way to include Entity Framework connection string used in WCF service into a self hosting console application?
我正在做功课,这是一种WCF服务,该服务将SQL Server与Entity Framework一起使用,通过控制台应用程序托管,并使用WPF客户端。
有3个不同的项目,并且主机和服务在同一解决方案中。 我在服务的web.config
文件中的控制台主机的app.config
文件中包含了Entity Framework连接字符串。 这样,当我尝试进行查询时,服务器和主机将引发异常:
System.Data.Entity.Core.EntityException:“基础提供程序在打开时失败。”
内部异常说:
SqlException:尝试为文件C:\\ Users \\ username \\ source \\ repos \\ BlogAppWcf \\ BlogHost \\ bin \\ Debug \\ BlogDb.mdf附加自动命名的数据库失败。 存在具有相同名称的数据库,或者无法打开指定的文件,或者该数据库位于UNC共享上。
因此,它基本上在其自己的项目文件夹中搜索.mdf
文件,而该文件位于服务的App_Data
文件夹中。
原始的连接字符串如下所示,我将其从web.config
复制到主机的app.config
:
connectionString="metadata=res://*/BlogDbEntities.csdl|res://*/BlogDbEntities.ssdl|res://*/BlogDbEntities.msl;
provider=System.Data.SqlClient;
provider connection string="
data source=(LocalDB)\MSSQLLocalDB;
attachdbfilename=|DataDirectory|\BlogDb.mdf;
integrated security=True;
MultipleActiveResultSets=True;App=EntityFramework""
我尝试修改app.config
的AttachDbFilename
属性,我给了它一个绝对路径,如下所示:
attachdbfilename=C:\Users\username\source\repos\BlogAppWcf\BlogAppWcf\App_Data\BlogDb.mdf;
这样,它就像一个魅力! 查询没有更多例外。
但这不是正确的方法,尤其是因为我必须将其发送给我的老师。 我想给它一个相对路径,就像这样:
attachdbfilename=..\..\..\BlogAppWcf\App_Data\BlogDb.mdf;
但这种方式行不通。
有没有人得到任何建议,也许我在做或在想完全错误的事情?
根据您的描述和遇到的问题,我认为问题归结为以下事实:附加数据库未正确附加到VS内置数据库服务器实例。 因此,我认为我们可以使用VS内置数据库实例字符串配置EntityFramework。
数据源=(localdb)\\ MSSQLLocalDB;初始目录= MyStore;集成安全性= True;连接超时= 30;加密= False; TrustServerCertificate = False; ApplicationIntent = ReadWrite; MultiSubnetFailover = False
然后重写DropCreateDatabaseAlways / DropCreateDatabaseIfModelChanges类的种子方法以提供种子数据。
请随时告诉我是否有什么我可以帮助的。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.