2012-04-03 6 views
0

Ich habe eine zu viele Beziehung definiert wie diese-Code zuerst ein bis Viele Beziehung

public class ClassA 
    { 
     [Key, ForeignKey("ClassB"), Column(Order = 0)] 
     public int ClassB_ID { get; set; } 
     [Key, Column(Order=1)] 
     public string name { get; set; } 
     public bool IsApproved { get; set; } 
     public virtual ClassB ClassB { get; set; } 
    } 
    public class ClassB 
    { 
    [Key] 
    public int ID{get;set;} 
    public string Name{get;set;} 
    public virtual ICollection<ClassA> classAs{get;set;} 
    } 

Werke gut, bis ich classA zu einem Listview mit Bind (ClassB.Name) binden

Ich erhalte die Object Instanz wurde entsorgt und kann nicht mehr für Operationen verwendet werden, die eine Verbindung erfordern.

Antwort

1

Dies könnte wegen der Verwendung Lazy Loading sein. Diese verursachen den zusätzlichen Umlauf in die Datenbank, wenn Sie versuchen, mit Navigationseigenschaft (ClassA) zuzugreifen, aber Ihr Kontext ist bereits entsorgt.

Lazy Loading-: Wenn das Unternehmen zum ersten Mal gelesen wird, bezogenen Daten sind nicht abgerufen. Wenn Sie jedoch das erste Mal versuchen, auf eine Navigationseigenschaft zuzugreifen, werden die für diese Navigationseigenschaft erforderlichen Daten automatisch abgerufen. Dies führt dazu, dass mehrere Abfragen an die -Datenbank gesendet werden.

Sie könnten wahrscheinlich dieses Problem mit Eager LoadingInclude() oder Explicit Laden lösen.

var values = context.ClassB.Include("ClassA").ToList() 

http://www.asp.net/web-forms/tutorials/continuing-with-ef/maximizing-performance-with-the-entity-framework-in-an-asp-net-web-application

+0

vielen Dank. Es funktionierte. – Janaka

Verwandte Themen