是否有可能以编程方式获得调用对象类型
本文关键字:调用 对象 类型 方式获 有可能 编程 是否 | 更新日期: 2023-09-27 18:15:44
我从这里得到了这个想法。它将旧式连接字符串转换为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);
调用在实例化后看起来是多余的,然后将类型传递给扩展方法。有没有一种方法可以通过编程的方式根据传递给
恐怕不行。
您需要以某种方式将DbContext类型发送给该方法,或者将其转换为类中的常量。
我不知道如何从方法内部获取调用者的类型,我认为这是个坏主意。这将是方法内部的附带效应。如果处理需要DbContext,它应该在方法签名中。如果你不改变它,它应该是一个常数。
您可以尝试使用"this.GetType()"或var dbContext = connString.GetEntityConnectionString(this.GetType())发送类型。