在运行时使用EF6连接到SQL Server -部分类构造函数的问题

本文关键字:-部 Server 分类 构造函数 问题 SQL 运行时 EF6 连接 | 更新日期: 2023-09-27 17:51:18

使用这篇文章,

EF6 DBContext动态连接字符串

我已经按照上面的指令设置了我的部分类

public partial class PxxxxEntities
{
    private PxxxxEntities(string connectionString)
        : base(connectionString)
    {
    }
    public static PxxxxEntities ConnectToSqlServer(string host, string catalog, string user, string pass, bool winAuth)
    {
        SqlConnectionStringBuilder sqlBuilder = new SqlConnectionStringBuilder
        {
            DataSource = host,
            InitialCatalog = catalog,
            PersistSecurityInfo = true,
            IntegratedSecurity = winAuth,
            MultipleActiveResultSets = true,
            UserID = user,
            Password = pass,
        };
        // assumes a connectionString name in .config of MyDbEntities
        var entityConnectionStringBuilder = new EntityConnectionStringBuilder
        {
            Provider = "System.Data.SqlClient",
            ProviderConnectionString = sqlBuilder.ConnectionString,
            Metadata = "res://*/DbModel.csdl|res://*/DbModel.ssdl|res://*/DbModel.msl",
        };
       return new PxxxxEntities(entityConnectionStringBuilder.ConnectionString);
    }
}

我无法启动使用ConnectToSqlServer方法。

尝试1:

public PxxxxEntities database = new PxxxxEntities(PxxxxEntities.ConnectToSqlServer
("server", "Catalogue","user","pass",true));     

'PxxxxEntities'不包含接受1个参数的构造函数

尝试2:

public PxxxxEntities database = new PxxxxEntities.ConnectToSqlServer
("server", "Catalogue","user","pass",true);  

类型名称'ConnectToSqlServer'不存在"PxxxxEntities"

(Per Crowcoder Comment)

尝试3:设置构造函数为public

public PxxxxEntities database = new PxxxxEntities(PxxxxEntities.ConnectToSqlServer
("server", "Catalogue","user","pass",true)); 

不能从模型转换。PxxxxEntities到'string'

(每恩)尝试4:

public PxxxxEntities database = PxxxxEntities.ConnectToSqlServer
("server", "Catalogue","user","pass",true);

附加信息:无法加载指定的元数据

有一个小的改变,

用Web.Config中的元数据更新方法中的元数据。要解析附加信息:无法加载指定的元数据

成功! !

在运行时使用EF6连接到SQL Server -部分类构造函数的问题

DbContext的构造函数是private,您有static工厂方法ConnectToSqlServer,但您试图调用私有构造函数。您创建类的方式没有任何问题。问题是你如何调用这个类。

public PxxxxEntities database = PxxxxEntities.ConnectToSqlServer
("server", "Catalogue","user","pass",true);