I got this idea from here.它将旧样式连接字符串转换为modelFirst连接字符串:
public static class ConnectionStringExtensions
{
public static string GetEntityConnectionString(this string connectionString, Type contextType)
{
var prefix = contextType.Namespace.Replace(contextType.Assembly.GetName().Name, "");
if (prefix.Length > 0
&& prefix.StartsWith("."))
{
prefix = prefix.Substring(1, prefix.Length - 1);
}
if (prefix.Length > 1 && !prefix.EndsWith("."))
{
prefix += ".";
}
var csBuilder = new EntityConnectionStringBuilder
{
Provider = "System.Data.SqlClient",
ProviderConnectionString = connectionString,
Metadata = String.Format("res://{0}/{1}.csdl|"
+ "res://{0}/{1}.ssdl|"
+ "res://{0}/{1}.msl"
, contextType.Assembly.FullName
, prefix + contextType.Name)
};
return csBuilder.ToString();
}
}
这很有效。我的问题是我打电话的时候:
string connString = ConfigurationMananager.ConnectionStrings["name"].ConnectionString;
var dbContext = new MyDbContext(connString.ToEntityConnectionString(typeof(MyDbContext);
调用在实例化时看起来多余,然后将类型传递给扩展方法。有没有办法根据传递给
的构造函数以编程方式进行编程答案 0 :(得分:1)
我担心这是不可能的。
您需要以某种方式将DbContext类型发送到方法,或者将其转换为类中的常量。
我不知道如何从方法中获取调用者的类型,我认为这是一个坏主意。这将是方法内部的附带效应。如果处理需要DbContext,则它应该在方法签名中。如果你永远不会改变它,它应该是一个常数。
您可以尝试使用“this.GetType()”或var dbContext = connString.GetEntityConnectionString(this.GetType())发送类型。