在我的应用程序中,从DB获取一个对象,其查询如下:
IList<MyObject> objects = GetContext()
.GetTable()
.Where(obj=>obj.ParentId==iParentId)
.ToList()
;
从“对象”获取数据后,列表被复制到业务对象列表中。稍后我需要使用来自业务实体的新数据更新此对象。为此,我需要从数据库中获取“数据库实体”,更新它的字段并调用“SubmitChanges()”。
问题是“从DB中第二次获取”不起作用。以下查询:
MyObject objectToBeUpdated = GetContext()
.GetTable()
.Where(obj=>obj.Id==iObjectId)
.SingleOrDefault()
;
返回null ..
Q1。为什么我在这里得到'null'?这可能导致我需要以某种方式“释放”第一个实体吗?或者我需要记住原始实体(不要再从DB中获取它)并更新它?
Q2。如何获得实体第二次?
P.S。实际上,我宁愿防止第二次获取,但是知道这里出错的原因会很好。
非常感谢。
P.S。我正在使用MSSQL 2005,VS2008,Linq2sql。
答案 0 :(得分:0)
我猜它返回null becoz没有记录满足你的where子句。由于您调用SingleOrDefault(),因此返回默认对象null。相反,如果你调用Single(),你将得到一个例外。仔细检查您确实在数据库中有符合条件的记录