我已经完成了所有关于实体和延迟加载的阅读,以及这里的其他问题,但对于我的生活,我无法得到这个工作。这是我的数据库 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)
);
以及获取它的实体代码(* EDITED from original,仍然损坏*):
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(即使我确定相关的公司在数据库中)。
我确实注意到的一件事是,在自动生成的 Entity Character 对象中,它具有以下功能:
public virtual Corporation Corporation
{
get { return _corporation; }
set
{
if (!ReferenceEquals(_corporation, value))
{
var previousValue = _corporation;
_corporation = value;
FixupCorporation(previousValue);
}
}
}
这看起来很奇怪,因为我会假设通过延迟加载“get”函数将类似于“如果为空,则尝试从数据库中获取 Corporation”。任何想法将不胜感激。
*编辑* 请求如何配置延迟加载:
在我的 Context 类中,对于我拥有的每个构造函数
this.ContextOptions.LazyLoadingEnabled = true;
正如您从上面的第一个 C# 函数中看到的那样,我尝试在函数本身中将其设置为 true,就在查询它之前。