【问题标题】:cannot save row update in LINQ无法在 LINQ 中保存行更新
【发布时间】:2015-09-14 20:56:57
【问题描述】:

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

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();

【问题讨论】:

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


【解决方案1】:

如果StudentID 是主键,您应该编写代码,如果此逻辑为假,它将失败。

通过使用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();

如果您使用了这种方法,您会得到一个更详细的异常,立即为您指明正确的方向。

准确地写出你的意思,是编程中最困难的部分,但有很大的优势,就像这样。

【讨论】:

    【解决方案2】:

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

    Selectedstudent.StudentID = QueryID
    

    代替

    QueryID = Selectedstudent.StudentID
    

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

    【讨论】:

    • 如果您的问题通过此解决方案得到解决,您可以将自己的答案标记为正确答案。
    • 我必须再等 1 天才能这样做:/
    猜你喜欢
    • 2013-10-21
    • 2019-03-13
    • 2011-03-02
    • 1970-01-01
    • 1970-01-01
    • 2016-03-22
    • 2019-11-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多