2017-06-19 7 views
0

次のように私は2つのエンティティクラスを持っている:MySQLのEntity FrameworkのC#外部キーデータロード遅延誤差

public class Stock 
{ 
    public int Id { get; set; } 

    public string ShortName { get; set; } 
    public string SecId { get; set; } 
    public double? LastClearPrice { get; set; } 
    public double? Garant { get; set; } 
    public DateTime? EndDate { get; set; } 

    public IList<Position> Positions { get; set; } 

} 

public class Position 
{ 

    public int Id { get; set; } 

    public Stock Stock { get; set; } //virtual for lazy loading 
    public int StockId { get; set; } 

    public DateTime OpenDate { get; set; } 
    public double OpenPrice { get; set; } 

    public DateTime? CloseDate { get; set; } 
    public double? ClosePrice { get; set; } 

    public int Size { get; set; } 

} 

を私が作っM」このようなクエリ:

IQueryable<Position> GetAllPositions() 
    { 
     _context = new StockWatcherContext(); 
     var getAllPos = _context.Positions.Select(x => x); 

     return getAllPos; 
    } 

しかしにおける株価フィールドgetALlPosオブジェクトはnullを返します。 ;さて、それはしても、私はデバッグを開始し、この

するvar getAllStocks = _context.Stocks.Select(X => x)のようなものを追加したときに起動する奇妙です

getAllStocksオブジェクトのデバッグモードでプロパティを開いた後、getAllPosオブジェクトのStockフィールドもデータで埋められます。私はここからどこへ移動し、なぜそれが起こるのか分かりません。何か案は?ありがとう。

+0

私はちょうど1つのクラスを見て、それは別のクラスの半分のように見えます... – Hackerman

+0

この質問を投稿する際に私はラインを逃しました。ごめんなさい。それを今修正しました... –

答えて

0

EFの遅延プロキシは有効ではないため、「在庫」プロパティは仮想(コメントとは逆)とマークされていません。ストックをロードしたら、EFは以前に読み込まれたポジションクラスのストックレファレンスを解決できます。

同じことがあなたのポジションの在庫になります。レイジーローディングの場合、EFがコールバックを管理して要求に応じてロードできるように、これらを仮想としてマークする必要があります。バーチャルがなければ、EFはそれらについて「認識」していなければnullにします。 (熱心にロードされた、または以前のコンテキストにロードされた。)

+0

それは働いた!また、そうでない場合はリストに呼び出したメソッドの戻り値の型を変更MySqlExceptionを得た:最初に閉じる必要があります。この接続に関連付けられているオープンのDataReaderが既にあります。ありがとうございました。 –

0

最終修正:ストッククラスで遅延読み込みのためのバーチャル

public virtual Stock Stock { get; set; } 

を。

メソッドの戻り値の型をListに変更します。

List<Position> GetAllPositions() 
    { 
     _context = new StockWatcherContext(); 
     var getAllPos = _context.Positions.Select(x => x).ToList(); 
     return getAllPos; 
    } 
関連する問題