2011-04-29 40 views
1

我使用Db的上下文的生成,使用EF 4.创建我的模型 我的模式是这样的:的ObjectDisposedException时得到外键字段

计划表: ID 名称

组表: ID 名称 ProgramID(相联系的Program.ID)

我想显示在我的网格这些列:

Program.Name - Group.Name

但grdGroups.DataSource = db.Groups.ToList()

不返回Program.Name

当我尝试这个,我得到的ObjectDisposedException。

Partial Public Class Group 
    Public ReadOnly Property ProgramName() As String 
     Get 
      Return Program.Name 
     End Get 
    End Property 
End Class 

返回Program.Name以将其包含在网格数据源中的最佳方式是什么?

回答

5

当我尝试这个,我得到 的ObjectDisposedException

的问题是延迟加载 - 当您尝试访问Program.Name它会尝试重新查询EF没有兑现相关Program实体,因此数据库,但上下文已经处理在这一点上,所以你会得到一个异常。

当你检索你的Group实体您可以使用Include()查询,指定你也想加载相关Program实体,即:

var groups = context.Groups.Include(x => x.Program); 
+1

谢谢你的提示! grdGroups.DataSource = db.Groups.Include(“Program”)。ToList() 为我工作! – 2011-04-29 17:55:08

+0

@BrokenGlass当我尝试'包括(x => x.Program)'我得到一个错误,它不能将lambda转换为字符串。我不得不使用'Include(“Program”)'。你知道这是为什么吗? – 2017-03-09 17:44:59