質問

EL_COURSESTEPUSERNOTESからStepUsernotesまで、SQL Server 2008データベースのテーブルを変更しました。 SSMAを使用してテーブルの名前を変更しました。

このテーブルは、ASP.NET 4.0アプリで使用されています。私はすべてのCRUDに対してLINQを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をsql dbmlファイルに削除し、新しいファイルを作成しました。古いテーブル名を含む文字列をすべてのソースコードを検索しました。何もない。コードがコンパイル...

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

エラーはSQL Serverから戻ってきており、ユーティリティを使用して、質問に示されているSQL Serverデータベースのすべての外部キーをリストしています。SQL:変更テーブルの名前の制約を変更する必要がありますか?

FKSの古いテーブル名の兆候も明らかにしません。

私は、どこを見るべきか、次に何を試すべきかについて完全に喪失しています。助言がありますか?

役に立ちましたか?

解決

答え:

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

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

愚かな私、私が最初に得たエラーがデータメンドフィールドに関連していたため、トリガーが問題であることに気付くべきでした。

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

生活し、学びます。

他のヒント

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

編集 - Visual Studio Serverブラウザーを意味します。

LINQをSQLクラスに再構築し、すべてのテーブルをドロップしてから、サーバーエクスプローラーから再度追加する必要があります

  1. Visual Studioでプロジェクトを開きます。
  2. DBMLファイルを開きます。
  3. 名前が変更されたテーブルを見つけてください。
  4. 選択して削除します。
  5. 保存する。
  6. サーバーエクスプローラーを開きます。
  7. データベースに接続します。
  8. 名前が変更されたテーブルを見つけてください。
  9. DBMLファイルのデザイナーをドラッグアンドドロップします。
  10. ファイルをもう一度保存します。
  11. プロジェクトを編集します。

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

ただし、ゼロから再作成している場合は、サーバーエクスプローラーで更新することが重要です。そうしないと、古い名前をスキーマから引き出します。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top