EF 4.1代码首先导致奇怪的(登录)运行时错误

时间:2011-05-05 20:30:49

标签: ef-code-first entity-framework-4.1

我首先使用EF 4.1代码。遇到一个非常奇怪的情况: 数据库不存在,代码执行,代码想要对存储库执行查询(使用存储库模式)

MyRepsitory.Get(whereClause)

我收到了这个错误:

  

无法打开数据库“MyDatabase”   登录请求。登录   失败。用户'sa'登录失败。

OK!所以我试图找到它是由什么造成的,并做了以下操作:在导致错误的行设置一个断点,一旦这行被击中,我从调试(监视)窗口发出另一个针对存储库的查询< / p>

MyRepository.GetAll();

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

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

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

查看SQL Serv2008 Exp的日志,我看到以下错误/事件:

启动数据库'MyDatabase'

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

错误:18456,严重程度:14,状态:38。

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

3 个答案:

答案 0 :(得分:9)

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

答案 1 :(得分:1)

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

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

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

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

我能想到的唯一解决方案是从头开始创建一个新的Visual Studio 2010解决方案,并将原始项目放在解决方案树中......它有效!

答案 2 :(得分:1)

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

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

他们还没有弄清楚数据库的用户实例(用户实例=真的'在你的连接字符串中,你在App_Data文件夹中创建一个SQL Server文件)。所以要么删除它,要么使用以下内容:

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

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

相关问题