具有Code First连接字符串的实体框架到远程数据库

时间:2013-11-08 06:24:06

标签: entity-framework-5 connection-string vpn

我正在使用本地计算机(ASP.NET MVC 4应用程序),但现在我想开始使用公司的SQL服务器,因此我需要更改连接字符串以便将我连接到该远程服务器。

设置如下:

  • 我有一个VPN连接,我使用的是IP地址,无法显示确切的IP所以让我们说 - xxx.xxx.xxx.xxx
  • 我有用户名和密码才能连接到VPN - VPNUsername / VPNPassword
  • 当我使用Microsoft SQL Server Management Studio连接到远程服务器时,我使用与用于连接VPN的相同IP - xxx.xxx.xxx.xxx
  • 我有不同的SQL Server用户名和密码 - SQLUsername / SQLPassword

我有一个现有的连接字符串,用于连接到我的电脑上的服务器,所以我认为仅仅改变那里的参数就足够了:

<add name="ProjectName.DAL.MyDbContext"
     providerName="System.Data.SqlClient"
     connectionString="Data Source=xxx.xxx.xxx.xxx;
     Initial Catalog=DatabaseName;Integrated Security=True;         
     MultipleActiveResultSets=True;
     user id=SQLUsername;password=SQLPassword;App=EntityFramework" />

因此,工作连接字符串并将我连接到本地服务器的更改有两个:

  1. Data Source= xxx.xxx.xxx.xxx - 我正在使用IP。在这里,我想知道IP本身是否足够。我应该使用http://xxx.xxx.xxx.xxx还是IP就可以了?
  2. user id=SQLUsername;pasword=SQLPassword - 我使用与Management studio中相同的用户名和密码,通过提供xxx.xxx.xxx.xxx作为服务器名称并使用SQLUsername,我可以成功连接到删除服务器/ SQL Server Authentincation下的/ SQLPassword。
  3. 所以要清楚 - 在Management Studio下我连接到远程服务器没有问题。但是,当我将连接字符串更改为我在HomeController上面发布的内容时,我的逻辑非常简单,只是为了检查是否执行了对数据库的调用:

    private MyDbContext db = new MyDbContext();
    
            //
            // GET: /Home/
    
            public ActionResult Index()
            {
                return View(db.Users.ToList());
            }
    

    我有3个例外:

    1. SqlException(0x80131904):用户“VPNUsername”登录失败
    2. ProviderIncompatibleException:提供程序未返回ProviderManifestToken字符串。
    3. ProviderIncompatibleException:从数据库获取提供程序信息时发生错误。这可能是由实体框架使用不正确的连接字符串引起的。
    4. 除此之外,在我看来,由于3号异常表明问题出在我正在使用连接字符串的方式,关注我的是Number 1异常,表示登录失败但不是对于我的SQLUsername但是对于VPNUsername。正如我所说 - 我真的使用VPN连接,我使用相同的IP - xxx.xxx.xxx.xxx连接到VPN和SQL Server(来自Management Studio)。

      知道如何解决这个问题吗?

1 个答案:

答案 0 :(得分:6)

在尝试连接SQL Server用户名/密码时,从连接字符串中删除Integrated Security=True