实体框架代码优先部署到公司SQL Server问题。
我有一个使用EF的ASP.NET MVVM应用程序。它在我的开发笔记本电脑上完美运行但是,当我将数据库移动到SQL Server公司时,我遇到了问题。
我在web.config
中使用的连接字符串是
<add name="ApplicationInventoryContext"
connectionString="Data Source=COMPANY_SQLSERVER; Initial Catalog=ApplicationInventory; Integrated Security=True;Connect Timeout=15;"
providerName="System.Data.SqlClient" />
连接字符串应该没问题,因为我可以使用以下连接来连接和查询数据库:
这是我的DbContext
:
public class ApplicationInventoryContext:DbContext
{
public DbSet<Application> Applications { get; set; }
public ApplicationInventoryContext() :
base("name=ApplicationInventoryContext")
{
Database.SetInitializer<ApplicationInventoryContext>(null);
}
}
这是我查询数据库的存储库:
public class DisconnectedRepository
{
public List<Application> GetApplicationsList()
{
using (var context = new ApplicationInventoryContext())
{
return context.Applications.AsNoTracking().ToList();
}
}
.....................
}
当我运行应用程序时,我收到以下错误:
Entity Framework Exception SqlException: Cannot open database requested by the login
SqlException:无法打开登录请求的数据库 用户登录失败&#39;域\用户ID”
如果错误显示我在上面的两个连接中使用的相同登录信息,那么怎么会发生这种情况?
答案 0 :(得分:3)
您的连接字符串指定Integrated Security=True
。这意味着它正在尝试使用运行应用程序的进程的标识来访问数据库。因为它是一个Web应用程序,您可能在本地使用IISExpress,这意味着它作为登录用户(即您)的身份运行。您是否有权使用用于登录计算机的凭据登录公司SQL服务器?如果没有,那就是你的问题。
对我来说似乎不寻常的是,您正试图从开发计算机上攻击企业SQL Server。大多数组织不允许开发人员访问生产,因此很难判断您是否违反了策略,试图做您正在做的事情,或者在您的环境中这是否正常。
这里有两个选项:
为您的域帐户登录公司SQL Server。这不是一个特别好的选择,因为如果你不是唯一的开发人员,那么每个开发人员都需要做同样的事情。
创建SQL Server登录并更改连接字符串以使用UserId和Password而不是集成安全性。这仍然不是一个很好的选择,因为现在每个开发人员都会知道公司SQL Server的登录凭据。
答案 1 :(得分:0)
由于Steve,我将发布我找到的解决方案。我发现的回复就在这里 stackoverflow.com/questions/4805094/
所以我所做的只是修改DBContext的构造函数,如下所示:
&GT;
public class ApplicationInventoryContext:DbContext { public DbSet Applications {get;组; }
public ApplicationInventoryContext() : base("Data Source=COMPANY_SQLSERVER; > Initial Catalog=ApplicationInventory; Integrated Security=True; Connect >Timeout=15;") { Database.SetInitializer<ApplicationInventoryContext>(null); }
}
现在它运作得很好。 请查看以上链接,您可以在其中找到其他方法