linq to sql 查询时加载出外键表数据

进入梦时才浪漫 2014-09-12 10:43:17
需求 linq to sql 查询时加载出外键表数据

假如有两个表 A,B ,A与B是一对一关联,用linq to sql 查询出A的一条数据时,同时把B数据也查询出来。
我的代码如下:

pulic A getA(){
using (var ctx = LINQ_CONTEXT.GetContext())
{
return ctx.A.FirstOrDefault();
}
}

pulic A getB(){
var a = getA();
var b = a.B;//此处报错了,错误为 无法访问已释放的对象。对象名:“在 Dispose 后访问的 DataContext。”
}

我该如何处理这样的需求呢,前提using在getA()方法中一定要释放
...全文
328 7 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
zxtxunmeng 2015-06-28
  • 打赏
  • 举报
回复
var b = a.B ; 此行代码在反问B的时候用到了 DbContext 对象 而且 pulic A getA(){ using (var ctx = LINQ_CONTEXT.GetContext()) { return ctx.A.FirstOrDefault(); } } 此处已经 释放了 DbContext 所以后面访问 DbContext 的时候回报错
低丶调 2014-10-01
  • 打赏
  • 举报
回复
看不懂额,刚毕业,基础不好
  • 打赏
  • 举报
回复
引用 2 楼 li1983243109 的回复:
lz,你这个问题解决了吗?我也好想明白
解决了,自己封装了一个公共的基方法, /// <summary> /// 获取单条 /// </summary> /// <param name="wherelambda"></param> /// <param name="action">无返回值委托</param> /// <returns></returns> public TEntity Get(Expression<Func<TEntity, bool>> wherelambda, Action<TEntity> action) { try { using (var ctx = LINQ_CONTEXT.GetContext()) { var entity = ctx.GetTable<TEntity>().Where(wherelambda).FirstOrDefault(); action(entity); return entity; } } catch (Exception ex) { log4net.LogManager.GetLogger(GetType()).Error(string.Format("Get {0}:", typeof(TEntity).ToString()), ex); return null; } //调用方式 //var entity = base.Get(m => m.Guid == guid, m => //{ // m.Staff = m.Staff;//赋值给外键表 // m.Staff1 = m.Staff1;赋值给外键表 //}); }
Tiger_Zhao 2014-09-17
  • 打赏
  • 举报
回复
需要让 ctx 对象在函数调用的上层。
低丶调 2014-09-17
  • 打赏
  • 举报
回复
lz,你这个问题解决了没有,我也很想明白,求教!!
低丶调 2014-09-17
  • 打赏
  • 举报
回复
lz,你这个问题解决了吗?我也好想明白
  • 打赏
  • 举报
回复
没人回答哇,自己顶下。

22,300

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧