问题在AsEnumerable调用之后在L2中附加实体

时间:2011-07-28 10:03:36

标签: asp.net-mvc linq linq-to-sql orm

我有像

这样的代码
    deleted = detailTable.AsEnumerable().Where(x=>childForiegnKey(x).Equals(parentKey(newMaster)) && 
!newDetail.Any(z=>childKey(z).Equals(childKey(x)))).ToList();

你知道我的方法在sql中没有翻译,这就是为什么我必须在where子句中调用这些方法之前调用AsEnumerable。当我尝试附加像

这样的实体时出现问题
  detailTable.Attach(x);

它开始大喊你不能使用相同的密钥等项目。我已经搜索过它,因为它已经使用相同的dataContext加载了相同的实体。好吧,那么相同的datacontext只在第一个Lambda表达式中调用db。我相信AsEnumerable是罪魁祸首(也许它将整个表格带入内存或将每一行标记为已加载等)。我怎么解决这个问题。我必须在where子句中使用这些方法,我必须附加实体。有解决方案吗? 编辑:值得一提的是,问题更加烦人,因为我们无法轻松地在L2中分离实体。二进制序列化要求我的所有类都使用一些属性进行修饰。所以我有点迷失在这里。

0 个答案:

没有答案