【问题标题】:Database Connection Error with ef-code-firstef-code-first 的数据库连接错误
【发布时间】:2012-06-05 23:21:23
【问题描述】:

我是 ef 代码新手,刚刚使用逆向工程代码在 Microsoft SQL Server 2008 上创建现有数据库的模型。

我遇到的问题是,即使我在连接字符串中提供了用户 ID 和密码,它也会给我一个身份验证错误,同时抱怨我的计算机名称,就好像我在使用集成安全性(我是不是。)

我得到的错误是这样的:

无法打开登录请求的数据库“edmTestDBContext”。登录失败。\r\n用户“jwelty-thinkpad\jwelty”登录失败。

我的连接字符串是这样的:

Data Source=srv-123;Initial Catalog=edmTestDB;Persist Security Info=True;User ID=user;Password=userpass;MultipleActiveResultSets=True

我觉得它忽略了我的用户 ID 并改用了我的机器名称。

有趣的是,连接字符串是由实体框架工具自动生成的,它可以用于构建模型,但不能用于将模型实际连接回源数据库。

有什么想法吗?

我确实拥有我的用户名/密码的完全权限,因为这是我在 Sql Server Management Studio 中使用的,也是我最初创建数据库的方式。

我尝试添加“Integrated Security=False;”这无济于事。

【问题讨论】:

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


    【解决方案1】:

    看起来 EF 没有找到您的连接字符串。确保它在正在使用的配置文件中(您可能需要将其从类库配置复制到应用程序配置)并且它与上下文类具有相同的名称,或者您通过调用为 DbContext 提供名称适当的基础构造函数。例如:

    public EdmTestDBContext()
     : base("name=MyConnectionStringName")
    {
    }
    

    【讨论】:

    • 对,我有这个,但我使用的是不喜欢的 ef 4.3.1,所以必须去掉 "name="。公共类 edmTestDBContext : DbContext { 静态 edmTestDBContext() { Database.SetInitializer(null); } 公共 edmTestDBContext() : base("edmTestDBContext") { }
    • 如果 4.3.1 "doen't like" name= 表示 DbContext 找不到连接字符串。从 CTP4 到 EF5 RC,这一点完全没有改变。从您的其他评论看来,DbContext 似乎找不到连接字符串,因为您需要按照建议将其复制到其他配置。当你使用 name= DbContext throws 让你知道它找不到连接字符串,而不是按照约定创建连接字符串。
    • 哦,好的。我在其他地方读过它,并一直认为这是我的问题的一部分。感谢您澄清这一点以避免任何进一步的混淆。我才刚刚开始学习,而且对 C#、EF、CF 和 WPF 还很陌生,所以我在这里一次性消化了很多东西。
    【解决方案2】:

    EF Code-first 中有一些内置约定,例如使用从 DbContext 派生的上下文类的名称在 .config 文件中查找相关的连接字符串。 所以如果你的上下文类被命名为BlogContext,它会首先寻找下面的connectionString:

    <connectionStrings>
        <clear />
        <add
          name="BlogContext"
    ...
    

    【讨论】:

    • 事实证明,我将 connectionString 放入了错误的 app.config 文件中。我在我的上下文项目和我的控制台项目中有一个,这是使用 dbcontext 对象的地方,所以它使用了控制台 app.config 文件。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多