1

SQL Server 2008 データベースのテーブルの名前を eL_CourseStepUserNotes から StepUserNotes に変更しました。SSMA を使用してテーブルの名前を変更しました。

テーブルは ASP.NET 4.0 アプリで使用されます。すべての CRUD に LINQ to SQL を使用しています。問題は、次のコードです。

    dbDataContext db = new dbDataContext();
    var k = (from c in db.StepUserNotes
             where ((c.CourseStepFK == q.CourseStepFK) && (c.UserFK == q.UserFK))
             select c).FirstOrDefault();
    try
    {
        db.StepUserNotes.InsertOnSubmit(q);
        db.SubmitChanges();
    }
    catch
    {

    }

次のように db.SubmitChanges 行で失敗します。

SqlException was caught. Invalid object name 'eL_CourseStepUserNotes'.

つまり、テーブルの古い名前が戻ってきて、私を悩ませています。

古い LINQ to SQL dbml ファイルを削除し、新しいファイルを作成しました。古いテーブル名を含む文字列をすべてのソース コードから検索しました。何もない。コードはコンパイルされます...

他にどこを見ることができますか?

エラーは SQL Server から戻ってきており、SQL Server データベース内のすべての外部キーを一覧表示するためのユーティリティを使用してい ます。

FKにも古いテーブル名の兆候はありません。

どこを見ればいいのか、次に何を試すべきなのか、私は完全に途方に暮れています。助言がありますか?

4

5 に答える 5

3

答え:

StuとStarkが述べたように、問題は引き金でした。Stuは、問題を解決するためのSQLを実行してくれました。他の誰かがこれに遭遇した場合に備えて、ここに文書化されています:

Select Object_Name(ID) From SysComments 
       Where Text Like '%el_CourseStepUserNotes%'

これにより、次の名前のトリガーが明らかになりました。

tr_eL_CourseStepUserNotes

トリガーは、次のように古い名前を参照しました。

SET DateAmended = CURRENT_TIMESTAMP
     FROM eL_CourseStepUserNotes PP  
            INNER JOIN inserted i  ON PP.UserNoteId = i.UserNoteId

すべてが再び機能しています。

愚かな私は、最初に得たエラーがDateAmendedフィールドに関連していたため、トリガーが問題であったことに気付くはずでした。

テーブル名が変更されたときにトリガーが更新される理由がわかりません。すべてのキーと関係を確認しましたが、このトリガーを忘れました。

生活し、学びます。

于 2010-11-15T20:23:31.603 に答える
0

linq to sqlファイルを再作成したときに、最初にテーブル名の変更を反映するようにサーバーブラウザーを更新したことを覚えていますか?

編集-私はビジュアルスタジオサーバーブラウザを意味します。

于 2010-11-15T18:07:04.143 に答える
0

LINQ To SQLクラスを再バインドし、すべてのテーブルを削除してから、サーバーエクスプローラーからそれらを再度追加する必要があります。

于 2010-11-15T18:07:45.583 に答える
0
  1. Visual Studio でプロジェクトを開きます。
  2. dbml ファイルを開きます。
  3. 名前を変更したばかりのテーブルを見つけます。
  4. 選択して削除します。
  5. 保存。
  6. サーバー エクスプローラーを開きます。
  7. データベースに接続します。
  8. 名前を変更したテーブルを見つけます。
  9. dbml ファイルのデザイナーにドラッグ アンド ドロップします。
  10. ファイルを再度保存します。
  11. プロジェクトをコンパイルします。
于 2010-11-15T18:56:28.127 に答える
0

DBML ファイルからテーブルを削除する必要はありません。デザイナーを開き、テーブルを表すクラス ダイアグラムをクリックして、テーブルの新しい名前を入力するだけです。

ただし、最初から再作成する場合は、サーバー エクスプローラーで更新することが重要です。更新しないと、スキーマから古い名前が引き続き取得されます。

于 2010-11-15T19:00:11.860 に答える