2012-10-13 10 views
10

Anstatt bei jeder Abfrage Folgendes zu tun, gibt es eine Möglichkeit, diesen Wert global festzulegen? In der Modellansicht gibt es eine LazyLoading-Einstellung, aber es scheint keine Einstellung für die ProxyCreation zu geben.Configuration.ProxyCreationEnabled in EF dauerhaft deaktivieren?

 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(); 
     } 

Ich verstehe nicht vollständig die Vorteile dieser Option, aber ich weiß, dass in Visual Studio-Tags alle meine Objekte mit Kauderwelsch Serien Suffixe und macht den Debugger unvernünftig verwenden.

Antwort

20

Sie können es im Konstruktor deaktivieren, so dass sie jederzeit deaktiviert werden Sie einen neuen Kontext erstellen:

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

Wie sieht es mit dem Problem der automatischen Dateigenerierung beim Aktualisieren des Modells aus? Werden die manuellen Änderungen nicht überschrieben? – jwrightmail

+0

Welches Problem mit der automatischen Dateigenerierung? –

+1

Um es im Konstruktor zu deaktivieren, müssen Sie eine automatisch erzeugte Datei bearbeiten. In meinem Fall ist sein Datamodel.context.cs. // Dieser Code wurde aus einer Vorlage generiert. // // Manuelle Änderungen an dieser Datei können zu unerwartetem Verhalten in Ihrer Anwendung führen. // Manuelle Änderungen an dieser Datei werden überschrieben, wenn der Code neu generiert wird. // jwrightmail

15

Wenn Sie einen Modell-First-Ansatz verwenden, dh Sie können eine EDMX-Datei haben, Um diese Option dauerhaft zu deaktivieren, müssen Sie die Datei .Context.tt ändern. Diese Datei ist eine Codegenerierungsvorlage, die der Erstellungsprozess verwendet, um die von DbContext abgeleitete Klasse zu generieren.

Öffnen Sie diese Datei und suchen Sie den Konstruktor:

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

     this.Configuration.ProxyCreationEnabled = false; 
    } 

dann die Codezeile hinzufügen, diese Eigenschaft auf false gesetzt. Erstellen Sie Ihr Projekt neu und überprüfen Sie, ob der generierte Kontext die Zeile enthält.

+2

überschrieben wird Dies ist meiner Meinung nach die richtige Antwort. Seien Sie jedoch vorsichtig, wenn Sie Entity Framework in Zukunft aktualisieren, da dies Ihre Änderungen in der .tt Datei überschreiben kann. (Es sei denn, ich täusche mich?) – rwalter

+0

Immer darüber gewundert ... Ich würde gerne eine Antwort sehen, die die erzeugte partielle Klasse mit DbContext erweitert (die nicht 'OnContextCreated' definiert). – seebiscuit