提取单个记录的简单代码(因为主键是一个int设置为自动编号,所以它是单一的):
using (var db = new DataClasses1DataContext())
{
var record = db.Projects.Single(x => x.ProjectID == projectID);
record.Deleted = true;
record.DeletedByUserID = MySession.Current.UserID;
record.DeletedOn = DateTime.Now;
db.SubmitChanges();
}
我不确定为什么,但在某些情况下,只要它db.SubmitChanges()
我们就会得到一个例外,说明Subquery returned more than 1 value. This is not permitted when the subquery follows =, !=, <, <= , >, >= or when the subquery is used as an expression.
但是当我&#34;观看&#34;记录我只收回一条记录。可能导致这种情况的原因是什么?
答案 0 :(得分:0)
那件事
db.Projects.Single()
意味着应该100%只返回1个值,并且有很多。
在这种情况下使用
db.Projects.FirstOrDefault()
或者更好的检查数据或选择条件。
Enumerable.Single Method (IEnumerable)
关于这个...“但是当我”观察“记录时,我只能找回一条记录。这可能是什么造成的?”
只需检查您的表格,看看您是否有重复的条目,或者如果您以其他方式填充数据上下文,请使用db.Projects()
获取所有记录并进行检查。
答案 1 :(得分:0)
使用db.Projects.First(x => x.ProjectID == projectID);
代替Single。
解决方法,不知道它是否有帮助,但它来自上面的链接:
public static TElement Single<TElement>
(this IQueryable<TElement> query)
{
if (query.Count() != 1)
{
throw new InvalidOperationException();
}
return query.First();
}
// Use it like this
Product prod = (from p in db.Product
where p.ProductID == 711
select p).Single();