2

私のasp.netアプリケーションには、新しい学生と学生の編集のような2つのページがあります。新しい学生のページでは、姓、名、携帯電話番号、電子メール、登録番号などの一般的な詳細を渡しています。

ここで、RegNo は一意である必要があります。データベース接続にEntity Frameworkを使用しています。次のように、同じ RegNo が入力されないように条件をチェックしています。

DataObject.Entities dataEntities = new DataObject.Entities();

if (!dataEntities.Students.Any(s => s.RegNo == RegNo))
{
    // my code here.
}

編集オプションと同じ方法で、RegNo を変更しようとします。他の学生に割り当てられている場合は、更新コードに入るべきではありません。

ここで同じ条件を使用すると、RegNo がこの学生 (更新しようとしている学生) のデータベースにあるため、失敗することがわかっています。したがって、RegNo がこの特定の学生に割り当てられ、他の学生には割り当てられていない場合それ以外の場合は、別の部分に移動する必要があります。

Entity Framework を使用してこれを確認する方法がわかりません。誰でも私を助けてくれますか?

私は列を持っていますStudentId、それは自動インクリメント列です

のようにしてみました

if (!dataEntities.Students.Any(s => s.RegNo == RegNo && s.StudentId != StudentId))
{
}

それでもうまくいかない……。

4

3 に答える 3

3
 if(!dataEntities.Students.Any(s=>s.RegNo == RegNo && s != studentBeingUpdated)) 

studentBeingUpdated現在更新している学生への参照を含む変数に置き換えます。

于 2012-04-26T09:21:29.430 に答える
1

データベース レベルで設定できます。つまり、自動インクリメントを設定すると、ID を編集したり他の人に再割り当てしたりする必要がなくなり、これを個別に管理する必要がなくなります。

間違って理解していたら教えてください。:)

于 2012-04-26T09:36:23.900 に答える
0

学生テーブルのオブジェクトを宣言して、次のように試しました。

DataObject.Student student = dataEntities.Students.First(s => s.StudentId == 
                                                                     StudentId);

 if (!dataEntities.Students.Any(s => s.RegNo == RegNo &&
                                             s.StudentId != student.StudentId))
 {

 }
 else
 {
    throw new exception("RegNo already exists!");
 }

そしてそれは私のために働いています

于 2012-05-22T12:23:56.593 に答える