1

これは私のエンティティクラスです:

public partial class NerdDinnerEntities : ObjectContext
{
    public NerdDinnerEntities(string connectionString)
        : base(connectionString, "NerdDinnerEntities")
    {
        try
        {
            ObjectContext oc = new ObjectContext(connectionString);

           oc.Connection.ChangeDatabase("NERDDINNER1");
           oc.AcceptAllChanges();
            this.ContextOptions.LazyLoadingEnabled = true;
            OnContextCreated();
        }
        catch (Exception ex) { }
    }

    partial void OnContextCreated();

    /// <summary>
    /// No Metadata Documentation available.
    /// </summary>
    public ObjectSet<Dinner> Dinners
    {
        get
        {
            if ((_Dinners == null))
            {
                _Dinners = base.CreateObjectSet<Dinner>("Dinners");
            }
            return _Dinners;
        }
    }
    private ObjectSet<Dinner> _Dinners;

    /// <summary>
    /// No Metadata Documentation available.
    /// </summary>
    public ObjectSet<RSVP> RSVPs
    {
        get
        {
            if ((_RSVPs == null))
            {
                _RSVPs = base.CreateObjectSet<RSVP>("RSVPs");
            }
            return _RSVPs;
        }
    }

    private ObjectSet<RSVP> _RSVPs;

    /// <summary>
    /// No Metadata Documentation available.
    /// </summary>
    public ObjectSet<sysdiagram> sysdiagrams
    {
        get
        {
            if ((_sysdiagrams == null))
            {
                _sysdiagrams = base.CreateObjectSet<sysdiagram>("sysdiagrams");
            }
            return _sysdiagrams;
        }
    }

    private ObjectSet<sysdiagram> _sysdiagrams;

    /// <summary>
    /// Deprecated Method for adding a new object to the Dinners EntitySet. Consider using the .Add method of the associated ObjectSet&lt;T&gt; property instead.
    /// </summary>
    public void AddToDinners(Dinner dinner)
    {
        base.AddObject("Dinners", dinner);
    }

    /// <summary>
    /// Deprecated Method for adding a new object to the RSVPs EntitySet. Consider using the .Add method of the associated ObjectSet&lt;T&gt; property instead.
    /// </summary>
    public void AddToRSVPs(RSVP rSVP)
    {
        base.AddObject("RSVPs", rSVP);
    }

    /// <summary>
    /// Deprecated Method for adding a new object to the sysdiagrams EntitySet. Consider using the .Add method of the associated ObjectSet&lt;T&gt; property instead.
    /// </summary>
    public void AddTosysdiagrams(sysdiagram sysdiagram)
    {
        base.AddObject("sysdiagrams", sysdiagram);
    }
}

これらは私のweb.configファイルです

<add name="NerdDinnerEntities" connectionString="metadata=res://*/Models.NerdDinner.csdl|res://*/Models.NerdDinner.ssdl|res://*/Models.NerdDinner.msl;provider=System.Data.SqlClient;provider connection string=&quot;Data Source=@;Database=NERDDINNER;User ID=@;Password=@@@;MultipleActiveResultSets=True&quot;" providerName="System.Data.EntityClients" />

そして私はエラーが発生しています:

指定された方法はサポートされていません

この行で:

oc.Connection.ChangeDatabase("NERDDINNER1");
4

2 に答える 2

2

MSDNでドキュメントを検索すると、このメソッドが文字通りサポートされていないことがわかります。将来の改善などのためのプレースホルダーである必要があります。

実行時にデータベースを変更したい人のために拡張するには:

1. app.configのデフォルトの代わりに使用するエントリを、設定に作成します。ユーザー名、パスワード、カタログ名(データベース名)、サーバーなどの詳細を他の設定エントリに引き出します。

<Setting Name="EntityConnectionString2" Type="System.String" Scope="Application">
  <Value Profile="(Default)">metadata=res://*/Model1.csdl|res://*/Model1.ssdl|res://*/Model1.msl;provider=System.Data.SqlClient;provider connection string="data source={0};initial catalog={1};persist security info=True;user id={2};password={3};encrypt=True;trustservercertificate=True;multipleactiveresultsets=True;App=EntityFramework"</Value>
</Setting>

{0} .. {3}エントリに注意してください。この接続文字列は、app.configのconfiguration / connectionStrings/addエントリ全体ではないことに注意してください。

2.接続文字列を受け入れるEFデータベースのオーバーロードされたコンストラクターの1つを使用します。

var settings = Properties.Settings.Default;  
string constring = string.Format(settings.EntityConnectionString2, settings.Server, settings.Database, settings.User, settings.Password);
NerdDinnerEntities db = new NerdDinnerEntities (constring);  

3.実行時に変更するには、同じ方法で別のカタログ名を使用して別のオブジェクトを作成するか、別のカタログ名を使用してdbオブジェクトを破棄して再作成します。

于 2012-07-31T06:56:24.887 に答える
0

EntityConnectionのChangeDatabaseメソッドはサポートされていません(http://msdn.microsoft.com/en-us/library/system.data.entityclient.entityconnection.changedatabase.aspx

別のデータベースでデータコンテキストを使用する場合は、別の接続文字列を作成し、新しい接続文字列を使用してデータコンテキストインスタンスを作成します

于 2012-07-31T06:56:14.560 に答える