无法在LINQ中保存行更新

时间:2015-09-14 20:56:58

标签: c# sql-server entity-framework linq visual-studio

我创建了一个学校的数据库,其中包含一堆值,并且我试图在我正在制作的程序中创建更新功能,每当我在服务器中保存更改时它都会产生异常,这是一个代码示例,其中我如何在本地更新行:

var query =
    from s in db.Students
    where s.StudentID == querierID
    select s;

foreach (Student s in query)
{
    s.FirstName = fntb.Text;
    s.LastName = lntb.Text;
    s.Mobile = mobiletb.Text;
    s.Street = streettb.Text;
}

以下是我实际保存到数据库的方式(将更新的行发送给它)

db.SaveChanges();

2 个答案:

答案 0 :(得分:1)

如果StudentID是主键,则应该以一种如果此逻辑变为false将失败的方式编写代码。

使用Single() extension method,如果查询返回的结果更多,您的代码将只返回一个学生或抛出。

这使您的代码更具可读性

var studentToEdit = (
    from s in db.Students
    where s.StudentID == querierID
    select s
    ).Single();

studentToEdit.FirstName = fntb.Text;
studentToEdit.LastName = lntb.Text;
studentToEdit.Mobile = mobiletb.Text;
studentToEdit.Street = streettb.Text;

db.SaveChanges();

如果你使用过这种方法,你会得到一个更详细的例外,直接指出你正确的方向。

准确地写出你的意思,是编程中最困难的部分,但却有很大的优势,比如说。

答案 1 :(得分:0)

好的,所以我找到了答案,问题实际上并不是我认为的那样,当我签署QueryID就像是

Selectedstudent.StudentID = QueryID

而不是

QueryID = Selectedstudent.StudentID

我真的很抱歉浪费每个人的时间,但是谢谢大家帮助我。如果有人有问题,他们最好在发布问题前检查他们的代码并像我一样浪费每个人的时间,真的很抱歉所有人:(。