2017-10-20 117 views
1

我有三个项目的解决方案:一个Web应用程序,数据访问层创建代码第一个数据库和一个Windows服务,我(希望)用于同步数据库中的一些数据。 我也参考了其他两个项目中的数据层。我在Web应用程序配置和服务配置中使用相同的连接字符串。一切工作正常的Web应用程序,但是当我访问数据上下文时,所有的表都是空的(枚举没有结果)。我没有得到任何错误。 所以我的问题是,我错过了明显的东西?Windows服务和实体框架

<add name="DataContext" connectionString="Data Source=(localdb)\MSSQLLocalDB; Database=Purple Moose; Integrated Security=True; User Id=purplemoose; Password=password; MultipleActiveResultSets=True;" providerName="System.Data.SqlClient" /> 
+0

数据库位于何处?你有没有检查它为什么是空的? – nvoigt

+0

这是一个本地数据库。实际上它不是空的。我使用相同的凭据从SSMS访问它,一切都在那里。此外,Web应用程序访问数据很好,但是当我调试Windows服务时,所有的表都是空的。 – sandra

+0

你是否使用同一个用户进行连接?连接字符串是怎么样的,它有用户/密码还是使用当前的Windows用户进行身份验证? – nvoigt

回答

0

您的连接字符串使用当前的Windows用户登录到您的数据库。您指定均为,集成安全性(aka windows用户)用户名/密码。

在这种情况下:

Windows身份验证优先于SQL Server登录。如果同时指定Integrated Security = true以及用户名和密码,则用户名和密码将被忽略,并且将使用Windows身份验证。

因此,您将始终使用当前的Windows用户登录数据库,这可能是Local System或类似的服务。无论哪种方式,因为你想要用户名/密码认证,删除Integrated Security=true或将其设置为false。

+0

这真是一个很好的观点,谢谢。我删除它,并保持原样。对于网络应用程序也一样。一切仍然适用于网络应用程序,但我现在得到一个错误“用户登录失败”的Windows服务。这仍然是进步。但为什么它不说这个网络应用程序相同? – sandra

+0

@sandra我只注意到你在使用LocalDB。 LocalDB对操作系统的用户来说是本地的。它会导致太多的不足以通过本地数据库的所有错综复杂。你可以阅读更多关于它[这里](https://docs.microsoft.com/en-US/sql/database-engine/configure-windows/sql-server-2016-express-localdb)。 – nvoigt

+0

你是最棒的,谢谢。 – sandra