gpt4 book ai didi

c# - Entity Framework 4.3.1 无法创建(/打开)数据库 [线程异常?]

转载 作者:太空狗 更新时间:2023-10-29 19:57:19 36 4
gpt4 key购买 nike

我曾在一个 MVC 3 项目中使用过 EF 4.1(Code First),它很好。

今天我尝试在 WinForms 项目中使用 EF 4.3.1(Code First)并遇到了一些真正的巫术:(我正在处理的原始项目是 WinForms,但是同样的事情也适用于附加控制台应用程序代码。)

当试图将一个简单的类输入数据库时​​,出现以下异常:无法打开登录请求的数据库“测试”。登录失败。用户“[ComputerName]\[Administrator]”登录失败。

我已尝试检查 SQL Server (2008 R2) 配置,但我的用户确实拥有服务器上的所有权限。

注意:数据库在我第一次运行应用程序时存在。

即使是下面的示例代码也不起作用:

class Program
{
public static void Main()
{
var person = new Person { Name = "Nathan" };
using (var db = new MyContext())
{ //#1
db.Persons.Add(person);
db.SaveChanges();
}
Console.Write("Person saved !");
Console.ReadLine();
}
}

public class Person
{
public int PersonId { get; set; }
public string Name { get; set; }
}

public class MyContext : DbContext
{
public DbSet<Person> Persons { get; set; }
public MyContext()
: base("Data Source=localhost;Database=Test;Integrated Security=True;")
{ }
}

我已尝试重新安装 EF 4.3.1 - 但无济于事。重新启动 SQL-Server 也没有任何效果。

注意:我注意到周围有很多类似的问题,但没有一个与我的回答相同 - 这是我希望我能幸运这里:)

澄清一下:被拒绝访问的用户是机器的所有者(本地管理员)。

编辑:我进行了一些实验,发现了一些很奇怪的东西:

如果我在标记为“#1”的行暂停程序并通过 Watch 窗口检查 db.Database.Exists() 的值,它会告诉我:“函数求值需要所有线程运行” 使用那个小wavey 按钮我可以单击以使其运行所有线程。 Image depicting the above paragraph

如果我点击该按钮,该函数的计算结果为 False

现在我可以做2件事:

  1. 继续执行:在这种情况下,我得到完全相同的异常。
  2. 从 Watch 窗口执行 db.Database.Create():在这种情况下,程序成功运行到最后,我在 SQL 管理中看到创建的数据库、表和行工作室

似乎是一个简单的解决方案,对吧?错了!

我尝试通过调用 db.Database.CreateIfNotExists(); 为数据访问添加前缀,但随后我在该行得到了完全相同的异常

db.Database.Initialize(true); 也没有效果...

注意: 如果使用上述方法创建数据库,我可以从那时起正确使用它,所以这至少是一半的安慰 :P 当然,问题是什么当我添加 DropCreateIfModelChangesDropCreateAlways Initalizer 时发生(因为我正在积极开发模型)。

谢谢。

[我怀疑它更多的是 Entity Framework 问题而不是 SQL Server。]

最佳答案

如果你碰巧打开了“抛出异常时中断”选项(Debug->Excptions),你可以在调试时看到这个异常。 EF 正在尝试连接到数据库,但它失败了,因为数据库尚不存在,因此引发了异常。由于打开了上面的选项,您会看到异常。这个异常实际上被 Entity Framework 捕获,然后 EF 将连接到 master 数据库以创建它在第一步中尝试连接的数据库。创建数据库后,它将再次使用原始连接字符串与数据库通信。因此,您可以按 F5 继续调试,因为该异常是将被处理的第一次机会异常,或者禁用关闭“抛出异常时中断”,这将导致仅针对未处理的异常而不是所有异常进行中断被抛出。

关于c# - Entity Framework 4.3.1 无法创建(/打开)数据库 [线程异常?],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10423445/

36 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com