Постоянно отключить Configuration.ProxyCreationEnabled в EF?

Вместо того, чтобы делать следующее для каждого запроса, есть ли способ установить это значение глобально? В представлении модели есть параметр lazyloading, но для 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();
        }

Я не полностью понимаю преимущества этой опции, но я знаю, что в visual studio есть теги всех моих объектов с сумасбродными суффиксами таблеток и делает использование отладчика необоснованным.

Ответ 1

Вы можете отключить его в конструкторе, чтобы он отключился при создании нового контекста:

public class LabEntities : DbContext
{
   public LabEntities()
   {
      Configuration.ProxyCreationEnabled = false;
   }
}

Ответ 2

Если вы используете подход, основанный на модели, то есть у вас есть .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. Перестройте проект и убедитесь, что сгенерированный контекст содержит строку.