我一直在使用 Entity Framework 开发 ASP.NET C#,有些人在某些关键点上帮助了我很多。
还有一点我不能完全理解。当我们从 EF 检索数据时,我们不应该使用对象及其子对象(外键关系表数据)吗?
这是我的数据库设计(也显示在我之前回答的问题中)
在我的代码中,我简单地得到如下的成员实体:
//In some aspx.cs file
var Mem = new MemberManager().GetById(2);
//In MemberManager class
public Member GetById(long id)
{
using(var Context = new NoxonEntities())
{
return Context.Member.First(c => c.Id == id);
}
}
当我这样做时:
var Mem = new MemberManager().GetById(2);
var Lang = Mem.Language;
//I get
//Error: 'Mem.Language' threw an exception of type 'System.ObjectDisposedException'
为了摆脱这个异常,我需要这样做:
public Member GetById(long id)
{
using(var Context = new NoxonEntities())
{
var Result = Context.Member.First(c => c.Id == id);
//Getting the Language Entity
Result.Language = Context.Language.First(c => c.Id == Result.LanguageId);
return Result;
}
}
我是否必须运行 SELECT 才能拥有完整的实体?如果有另一个与语言表相关的表,比如说功能表。我应该这样做:
public Member GetById(long id)
{
using(var Context = new NoxonEntities())
{
var Result = Context.Member.First(c => c.Id == id);
//Getting the Language Entity
Result.Language = Context.Language.First(c => c.Id == Result.LanguageId);
Result.Language.Feature = Context.Language.Feature.First(c => c.Id == Result.FeatureId);
return Result;
}
}
这可能会持续很长时间,我很确定(至少我真的希望)我错了,但是如果我们在选择之后不能使用对象及其子对象,那么拥有 EF 的目的是什么?我们可以只使用using(var Context = new NoxonEntities())
块中的子对象吗?
谢谢,