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

时间:2014-07-29 20:18:43

标签: c#

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);

调用在实例化时看起来多余,然后将类型传递给扩展方法。有没有办法根据传递给

的构造函数以编程方式进行编程

1 个答案:

答案 0 :(得分:1)

我担心这是不可能的。

您需要以某种方式将DbContext类型发送到方法,或者将其转换为类中的常量。

我不知道如何从方法中获取调用者的类型,我认为这是一个坏主意。这将是方法内部的附带效应。如果处理需要DbContext,则它应该在方法签名中。如果你永远不会改变它,它应该是一个常数。

您可以尝试使用“this.GetType()”或var dbContext = connString.GetEntityConnectionString(this.GetType())发送类型。