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

特定のアイテムを更新するために生成された場所条件がないことは、クエリから明らかです。

では、オブジェクトをデータベースに更新するための最良の方法は何ですか?

4

1 に答える 1

2

StudentIdプロパティが値に設定されていないStudentオブジェクトを渡しています。そのため、where基準はwhere studentid = 0を更新しようとしています。関数を呼び出す前に値を設定すると、準備が整います。

これを行うことで、studentIdとstudentの両方を渡すUpdateStudentByIDを呼び出す必要はなく、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 に答える