首页 > 解决方案 > EF6:调用 ExecuteSqlCommand 后 DbContext.Database.Connection.ConnectionString 发生变化

问题描述

我在 EF6 观察到一个奇怪的行为DbContext。我的自定义DbContext类从我的 App.config 中读取其连接字符串:

public partial class WorkobjectContext : DbContext
{
    public WorkobjectContext()
        : base("name=MainConnectionString")
    {
        // Set the initializer to null to disable intializtion otherwise EF tries to create the table if it does not exist (CreateDatabaseIfNotExists)
        Database.SetInitializer<WorkobjectContext>(null);
    }
}

当我为我的 Ado.NET 函数使用相同的连接字符串时,我尝试从以下内容中读取连接字符串DbContext

var connectionstring = this.MyContext.Database.Connection.ConnectionString;

但现在我正在观察this.MyContext.Database.Connection.ConnectionString我所说的变化ExecuteCommand

...
Console.WriteLine(this.WorkobjectContext.Database.Connection.ConnectionString);
// Output: DATA SOURCE=XXXX:1000/XXXX.XXXX;PASSWORD=MyPassword;USER ID=MyUserId

var ret = this.WorkobjectContext.Database.ExecuteSqlCommand(
    "BEGIN WPK_Inbox.Check_WOB_User(:pn_UserID, :pn_WOBID, :pn_Return, :pvErrorMsg, :pnErrorCode); end;",
    new object[]
    {
        userIdParameter,wobIdParameter,returnValueParameter,errorMsgParameter,errorCodeParameter
    }
    );
    
Console.WriteLine(this.WorkobjectContext.Database.Connection.ConnectionString);
// Output: DATA SOURCE=XXXX:1000/XXXX.XXXX;PUSER ID=MyUserId

如您所见,调用ExecuteSqlCommand连接字符串后,密码部分消失了。
为什么会这样?这是一个错误吗?

标签: c#entity-frameworkconnection-string

解决方案


推荐阅读