エンティティと遅延読み込み、およびその他の質問についてはここで読んだことがありますが、私の人生にとってはこれができません。ここではDBのための私のSQLです:C#エンティティフレームワークレイジーロードがロードされていない
CREATE TABLE corporations(
corporationID bigint PRIMARY KEY
);
CREATE TABLE Character(
personID bigint PRIMARY KEY,
corporationID int NOT NULL,
FOREIGN KEY (corporationID) REFERENCES corporations(corporationID)
);
そして、それを得るために、エンティティコード(* 元から編集、まだ*を破ら):
DBEntities context = new DBEntities();
public Character Character_GetByID(long CharacterID)
{
context.ContextOptions.LazyLoadingEnabled = true;
Character character = context.Characters.Where(c => c.CharacterID == CharacterID).FirstOrDefault();
return character;
}
だから、私の理解から、このと私は行けるはずです
Character char = Character_GetByID(characterID);
Corporation corp = char.Corporation;
"char.Corporation"オブジェクトが存在し、Entityはfor eign key。しかし、上記のコードを実行すると、 "corp"は必ずNULLとして返されます(関連する企業がDBにあることを確実に知っていても)。
ことの一つは、私は通知が自動生成されたエンティティCharacterオブジェクトで、それが機能を持っているということですやった:私は遅延読み込みとそれを前提となるので、奇妙に思える
public virtual Corporation Corporation
{
get { return _corporation; }
set
{
if (!ReferenceEquals(_corporation, value))
{
var previousValue = _corporation;
_corporation = value;
FixupCorporation(previousValue);
}
}
}
「取得」機能だろう「もしnullなら、データベースから企業を得ようとする」のようなものになります。どんな考えも高く評価されます。
*設定方法遅延読み込みのための* 要求EDIT:私のContextクラスで
、私は
this.ContextOptions.LazyLoadingEnabled = true;
を持っており、すべてのコンストラクタのために、あなたは最初のC#から見ることができるように上記のように関数を照会する直前に、関数自体にtrueを設定しようとしました。
、usingステートメントを削除し、あなたが遅延ロードを設定したんどのようにペーストしてもらえますか? – ivowiblo
a。インクルード(x => x.Corporation)を使用します。 – Greens
@ivowiblo:私はLazyLoadingの設定で行ったことを示す編集を追加しましたが、設定が他に分かっていれば、私はそれについてはわかりません。 – Jordan