2

我是 DotNetNuke 的新手,我正在创建一个新模块,我试图找出在数据库中上传数据的最佳方式是什么。

我使用了这段代码:

public void UpdateStudentByID(int studentID, Student student)
{
    using (IDataContext ctx = DataContext.Instance())
    {
        var rep = ctx.GetRepository<Student>();
        rep.Update(student);
    }
}

但问题是它没有更新数据库中的任何内容,当我检查 SQL 配置文件时,我发现它生成了这个查询:

exec sp_executesql N'UPDATE [Attendance_Students] SET [Surname] = @0, [GivenNames] = @1, [Birthdate] = @2, [Gender] = @3, [Address1] = @4, [Address2] = @5, [State] = @6, [PostCode] = @7, [Notes] = @8, [CreatedByUserId] = @9, [LastModifiedOnDate] = @10 WHERE [StudentId] = @11',N'@0 nvarchar(4000),@1 nvarchar(4000),@2 datetime,@3 nvarchar(4000),@4 nvarchar(4000),@5 nvarchar(4000),@6 nvarchar(4000),@7 nvarchar(4000),@8 nvarchar(4000),@9 int,@10 datetime,@11 int',@0=N'Good',@1=N'Good',@2='2013-02-20 00:00:00',@3=N'Male',@4=N'dsfdfsdfdf',@5=N'',@6=N'SA',@7=N'',@8=N'good',@9=1,@10='2013-02-15 02:58:39.047',@11=0

从查询中可以明显看出,没有产生更新特定项目的 where 条件。

那么将对象更新到数据库中的最佳方法是什么?

4

1 回答 1

2

您传入的 Student 对象没有将 StudentId 属性设置为值——这就是为什么您的 where 条件试图更新 where studentid = 0 的原因。在调用函数之前设置值,您应该可以开始了。

通过这样做,您无需调用 UpdateStudentByID 并传递 studentId 和 student,而只需调用 UpdateStudent 并传递 student。

...
//Before calling UpdateStudent, make sure your StudentId property is set
student.StudentId = 123;
....

public void UpdateStudent(Student student)
{
    using (IDataContext ctx = DataContext.Instance())
    {
        var rep = ctx.GetRepository<Student>();
        rep.Update(student);
    }
}

希望这可以帮助。

于 2013-02-15T04:00:51.433 回答