10

すべてのクエリで次のことを行う代わりに、その値をグローバルに設定する方法はありますか? モデルビューには遅延読み込みの設定がありますが、ProxyCreation には設定がないようです。

        using (var context = new LabEntities())
        {
            **context.Configuration.ProxyCreationEnabled = false;**

            var Query = from s in context.EAssets
                        .Include("Server").Include("Type").Include("Type.Definition")
                        where (s.Type.Definition.b_IsScannable == true) &&
                        (s.Server.s_Domain == Environment.UserDomainName || s.Server.s_Domain == null)
                        select s;
           var Entities = Query.ToList();
        }

このオプションの利点を完全には理解していませんが、ビジュアルスタジオでは、すべてのオブジェクトに意味不明なシリアルサフィックスをタグ付けし、デバッガーの使用を不合理にすることを知っています。

4

2 に答える 2

23

新しいコンテキストを作成するたびに無効になるように、コンストラクターで無効にすることができます。

public class LabEntities : DbContext
{
   public LabEntities()
   {
      Configuration.ProxyCreationEnabled = false;
   }
}
于 2012-10-13T01:16:09.223 に答える
17

モデル優先のアプローチを使用している場合、つまり .edmx ファイルがある場合、このオプションを永続的に無効にする方法は、.Context.tt ファイルを変更することです。このファイルは、ビルド プロセスが DbContext 派生クラスを生成するために使用するコード生成テンプレートです。

このファイルを開き、コンストラクターを見つけます。

public <#=Code.Escape(container)#>()
        : base("name=<#=container.Name#>")
    {
<#
        WriteLazyLoadingEnabled(container);
#>
        //add the following line of code

        this.Configuration.ProxyCreationEnabled = false;
    }

次に、このプロパティを false に設定するコード行を追加します。プロジェクトを再構築し、生成されたコンテキストに行が含まれていることを確認します。

于 2012-12-06T21:27:39.680 に答える