使用vs2012,我有一个包含.edmx文件和linq的测试单元项目(用于测试服务)。 edmx是在设计时创建的,我创建了一个对象(名为Store.Data.Common),它从App.Config文件中检索连接字符串(解密字符串并构建包含元数据的整个字符串):
//Object is called Store.Data.Common
public static string GetConnectionString(string databaseName)
{
var security = new Security();
var connectionString = security.GetDecoded(ConfigurationManager.ConnectionStrings[databaseName+"Encrypted"].ToString(), 0);
var environment = ConfigurationManager.AppSettings["Environment"].ToString();
var dataSource = security.GetDecoded(ConfigurationManager.AppSettings[environment], 0);
connectionString = string.Format(connectionString, dataSource);
return connectionString;
}
我还修改了.tt文件以包含构造函数的重载来调用此方法来构建连接字符串,如下所示:
//Original Constructor which I modified and added the parameter to pass to the other constructor.
public StoreContext()
: base("name=StoreContext")
{
}
//Constructor I added:
public StoreContext(string connection)
{
Store.Data.Common.ConnectionBuilder.GetConnectionString("StoreContext");
}
所有内容都正确构建,但是,当我尝试为StoreContext创建一个对象并将构造函数留空时,它永远不会到达第二个构造函数:
StoreContext storeContext = new StoreContext();
当我调试此测试并遍历它时,它只会到达第一个构造函数,就是这样。显然,如果我做这样的事情:
StoreContext storeContext = new StoreContext("Blah");
然后按预期进入第二个......我的问题是,为什么第一个方法在将任何内容传递给构造函数时都不起作用?从技术上讲,它应该工作,对吗?
答案 0 :(得分:3)
我认为你的意思是使用
public StoreContext()
: this("name=StoreContext")
{
}
(使用this
而不是base
)。
使用this()
意味着您在同一个类上调用构造函数。当你说base()
时,你试图在基类上调用构造函数。
编辑:它看起来也不像你正在使用你传入非默认构造函数的参数。但这是另一个问题,而不是问题的根源。