是否有可能以编程方式获得调用对象类型

本文关键字:调用 对象 类型 方式获 有可能 编程 是否 | 更新日期: 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())发送类型。