エンティティと遅延読み込みで見つけられるすべての読み取りと、ここでの他の質問を行いましたが、私の人生では、これを機能させることはできません。DBのSQLは次のとおりです。
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」オブジェクトが存在し、エンティティが外部キーから適切に作成しました。しかし、上記のコードを実行すると、「corp」は常に NULL として返されます (関連する企業が DB にあることは確かですが)。
私が気づいたことの 1 つは、自動生成された Entity Character オブジェクトに、次の機能があることです。
public virtual Corporation Corporation
{
get { return _corporation; }
set
{
if (!ReferenceEquals(_corporation, value))
{
var previousValue = _corporation;
_corporation = value;
FixupCorporation(previousValue);
}
}
}
レイジーロードを使用すると、「get」関数は「nullの場合、データベースからCorporationを取得しようとする」のようなものになると思うので、これは奇妙に思えます。どんな考えでも大歓迎です。
* EDIT * 遅延読み込みの設定方法のリクエスト:
私の Context クラスでは、私が持っているすべてのコンストラクターに対して
this.ContextOptions.LazyLoadingEnabled = true;
上記の最初の C# 関数からわかるように、クエリを実行する直前に、関数自体で true に設定しようとしました。