2011-05-05 33 views
7

我先使用EF 4.1代码。运行到一个非常奇怪的情况: 数据库中不存在,代码被执行,只要代码要执行对资源库中查询(也使用存储库模式)EF 4.1代码首先导致奇怪(登录)运行时错误

MyRepsitory.Get(whereClause) 

我得到这个错误:

Cannot open database "MyDatabase" requested by the login. The login failed. Login failed for user 'sa'.

行!所以我试图找出它是由什么引起的,并做了以下操作:在导致错误的行上设置了一个断点,并且一旦该行被命中,我从调试(观察)窗口发出另一个针对存储库的查询

MyRepository.GetAll(); 

et voila数据库被创建。所以我想:为什么不欺骗数据库(作为解决方法)并对存储库发出此请求?结果是:一旦这个代码被执行,我会得到相同的错误!

我在做什么错了? 这曾经像一个魅力工作!

编辑 这让我生气! 我将模型和一些代码(用于存储库模式)分离到一个新项目中。试图执行相同的代码,它在这个新项目中起作用。这怎么可能?

看着SQL Serv2008 EXP的日志,我看到下面的错误/事件:

启动备份数据库 'MyDatabase的'

设置数据库选项SINGLE_USER为ON数据库MyDatabase的。

错误:18456,严重性:14,状态:38

用户登录失败 '山'。原因:无法打开显式指定的数据库。 [客户:]

回答

1

为了将来的使用:事实证明,EF 4.1不是我的问题的根源!

正如我上面所述(在编辑之后),可以在新项目中运行(UNCHANGED)代码,它将按预期执行!

同样,我成功地创建了一个新项目,引用了原始项目的模型和DAL(存储库等)以及新项目中按预期方式执行的新代码。

这使我认为这是一个基于Visual Studio 2010解决方案(或项目)的问题。我不记得对这个解决方案做了什么奇怪的事情(我做的唯一的事情就是添加了一个测试项目,之后我删除了这个项目,还有一些 - 我认为有三个文件与这个项目的测试项目有关 - 是这个WEIRD? )。

我能想到的唯一解决方案就是从头开始创建一个新的Visual Studio 2010解决方案,并将原始项目放入解决方案树中并且它工作正常!

+0

我今天在VS 2015的Web API项目中遇到了非常类似的问题。我从零开始没有任何新项目。相反,我在解决方案资源管理器中对我的C#web API项目执行了一个干净的操作,并且它工作正常。这太疯狂了。同一个sa凭证(在我的项目的web.config文件中配置)在整个一天都在工作,它突然停止工作,没有任何地方。 – RBT 2016-12-02 12:01:49

9

感谢Savvas,分享创建新解决方案解决您的问题的事实。我遇到了与EF 4.1相同的奇怪问题,并且删除VS2010“SUO”文件似乎对我有用。以为我会分享这一点,以节省时间从头开始重新创建解决方案。

+1

任何想法是什么造成这种情况? – FRoZeN 2011-09-01 12:36:42

+0

我在VS2012上,根本没有任何'suo'文件。 – Shimmy 2012-11-15 00:08:19

+0

@Shimmy:即使在VS2012上也应该有一个,不包括在解决方案中,但与.sln文件一起,并且隐藏。删除它解决了这个问题。 – 2013-01-19 14:40:53

1

我遇到了这个问题,经过深入研究发现,Code First认为它是架构的唯一拥有者,这是一个问题。

http://social.msdn.microsoft.com/Forums/en/adonetefx/thread/79885a6d-e0f2-4948-8f3c-d5da1941ace3

他们还没有完全得到它想出了DB的用户实例(这就是“用户实例=真”,就是在连接字符串中与您建立在App_Data文件夹中的SQL Server的文件)。因此,要么删除它或使用以下内容:

Data Source=.\SQLEXPRESS;Database=NerdDinners;Integrated Security=SSPI; 

Code First将创建并附加(或修改)数据库直接到您的SQL Server实例。然后您可以使用Management Studio或VS Server Explorer连接到它。