私は 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){}
}
...これで、生成された元のコンテキストをデフォルトのコンストラクターで誤って呼び出すことはなくなりました。
他の提案をありがとう、それらも見てみましょう(-: