我有一个 wpf 应用程序并使用 EF4 与数据库进行通信。我正在动态选择连接字符串,具体取决于调试器是否附加:
public static string CustomerConnectionString;
public static string ProjectsConnectionString;
private static void GetConnectionstring()
{
if (Debugger.IsAttached)
{
CustomerConnectionString = ConfigurationManager.ConnectionStrings["kundenEntities"].ConnectionString;
ProjectsConnectionString = ConfigurationManager.ConnectionStrings["projekteEntities"].ConnectionString;
}
else
{
CustomerConnectionString = ConfigurationManager.ConnectionStrings["kundenEntitiesRelease"].ConnectionString;
ProjectsConnectionString = ConfigurationManager.ConnectionStrings["projekteEntitiesRelease"].ConnectionString;
}
}
我这样做是为了确保不会意外地在生产数据库中做一些事情。
然后以这种方式创建一个实体对象:
using (ProjectEntities proj = new ProjectEntities(App.ProjectsConnectionString))
{
I'm proper code
}
现在我想确保我不会意外调用默认构造函数来获取实体对象。这将导致实体对象使用 app.config 中的默认连接字符串。默认连接字符串是调试连接字符串,它连接到我的本地数据库。应该清楚,如果发生这种情况,从该实体查询的数据正在我的调试器中工作,但对用户不起作用,因为该用户没有与我的本地数据库的连接(-:
我现在做了一个解决方法并派生了实体类并只提供需要连接字符串的构造函数:
public class ProjectEntities : projekteEntities
{
public ProjectEntities(string connectionString) : base (connectionString){}
}
更新
我以这种方式解决了我的需求:
我重命名了生成的 projekteEntitites 类...
public partial class ObsoleteProjekteEntities : ObjectContext
{
#region Konstruktoren
/// <summary>
/// Initialisiert ein neues projekteEntities-Objekt mithilfe der in Abschnitt 'projekteEntities' der Anwendungskonfigurationsdatei gefundenen Verbindungszeichenfolge.
/// </summary>
public ObsoleteProjekteEntities() : base("name=projekteEntities", "projekteEntities")
{
this.ContextOptions.LazyLoadingEnabled = true;
OnContextCreated();
}
/// <summary>
/// Initialisiert ein neues projekteEntities-Objekt.
/// </summary>
public ObsoleteProjekteEntities(string connectionString) : base(connectionString, "projekteEntities")
{
this.ContextOptions.LazyLoadingEnabled = true;
OnContextCreated();
}
/// <summary>
/// Initialisiert ein neues projekteEntities-Objekt.
/// </summary>
public ObsoleteProjekteEntities(EntityConnection connection) : base(connection, "projekteEntities")
{
this.ContextOptions.LazyLoadingEnabled = true;
OnContextCreated();
}
并派生了那个类......
public class ProjectEntities : ObsoleteProjekteEntities
{
public ProjectEntities(string connectionString) : base (connectionString){}
}
...现在我不会意外地使用默认构造函数调用原始生成的上下文。
感谢您的其他建议,也将看看它们(-: