0

私はADO.NETにかなり慣れていません。基本的なINSERTなどはすべて問題ありません。しかし、外部キーを含むテーブルにレコードを挿入する際に問題が発生しました。私はいくつかの調査を行いましたが、まだ行き詰まっています...だからここに行きます:

Professionalsというテーブルに新しいレコードを挿入したいと思います。別のテーブルにマップされた外部キーがあります。FKはWAPublicUserIDです。

画像を参照してください:

ここに画像の説明を入力してください

データモデルを作成すると、WAPublicUserIDがProfessionalデータモデルのプロパティに表示されません。

画像を参照してください:

ここに画像の説明を入力してください

したがって、コードにINSERTを作成しようとすると、WAPublicUserIDフィールドが見つからず、レコードを挿入できません。使用したいWAPublicUserIDは、FKがマップされているWAPublicUserテーブルにすでに存在します。

画像を参照してください:

ここに画像の説明を入力してください

WAPublicUserテーブルの既存のレコードへの外部キーを含むProfessionalsテーブルに新しいレコードを挿入するにはどうすればよいですか?ありがとう!

4

3 に答える 3

1

誰かが「モデルに外部キープロパティを含める」をfalseに設定しました。

したがって、WAPublicUserのナビゲーションプロパティはありますが、ForeignKeyプロパティはありません。

これは、保存しようとしているオブジェクトのWAPublicUserプロパティに関連するWAPublicUserオブジェクトをアタッチする必要があることを意味します。

あなたが何をしているのかを正確に知るにはもっとたくさんのコードが必要ですが、その基本は次のとおりです。

WAPublicUserがすでに存在する場合:

  • データベースから既存のエンティティを取得します-OldEntity。

  • OldEntityを、現在保存しようとしている新しいエンティティのプロパティで更新します。

  • (現在更新されている)古いエンティティをデータベースに保存し直します。これを読んだばかりなので、WAPublicUser参照がすでに設定されているはずです。

そうでない場合:

  • 新しいWAPublicUserを作成します

  • ProfessionalオブジェクトのWAPublicuserプロパティを新しく作成されたWAPublicUserに設定します。この行は、コードが上で停止する場所に配置されます。

  • myEnt.AddToProfessionals(pro);

  • myEnt.SaveChanges();
于 2012-07-13T18:48:46.560 に答える
0

とった。他の誰かがこれを読んだ場合に備えて、これがどのように機能するかです。#1と#2が焦点です。

私を正しい道に導いてくれた@BonyTにMuchoは感謝します...

using (JONDOEntities myEnt = new JONDOEntities())
        {    
            // #1) Need to create WAPublicUser object first
            var wap = (from w in myEnt.WAPublicUsers
                       where w.WAPublicUserID == 981
                       select w).FirstOrDefault();

            var proUser = (from p in myEnt.Professionals
                           where p.WAPublicUser.WAPublicUserID == wap.WAPublicUserID
                           select p).FirstOrDefault();

            // If the record does not exist in the Professional table, insert new record. 
            if (proUser == null)
            {
                JONDOModel.Professional pro = new JONDOModel.Professional()
                {                        
                    ProfessionalType = "unknown",
                    FirstName = "unknown",
                    LastName = "unknown",
                    PhoneNumber = "unknown",
                    WebsiteUrl = "unknown",
                    TaxID = "unknown",
                    BusinessInfo = "unknown",
                    ProfessionalLogo = "unknown",
                    IsApproved = true,
                    CATaxExempt = false,                       
                    WAPublicUser = wap     // #2) Plug in the WAPublicUser object here
                };

                myEnt.AddToProfessionals(pro);
                myEnt.SaveChanges();
            }
于 2012-07-16T06:34:21.127 に答える
0

OK、これが私のOPに対する本当の答えです:

私が管理を引き継いだasp.netWebサイトは、.NET3.5を対象としていました。どうやら、3.5とEntityFrameworkにはいくつかの問題があります。

Webサイトをターゲットの.NET4.0に変換しました(*方法については以下を参照してください)。エンティティデータモデルvoilaを作成しようとすると、デフォルトで外部キーが含まれるようになったため、OPで説明されているような問題は発生しませんでした。

このような状況が発生した場合は、Webサーバーも.NET4.0にアップグレードされていることを確認する必要があります。Webサイトファイルをターゲットの.NET4.0にアップグレード/変換したが、Webサーバーがアップグレードされていない場合、Webサイトは開発マシンでスムーズに実行されますが(.NET 4.0フレームワークがあると仮定)、次の場合にクラッシュします。ライブWebサーバー。

余談ですが、.NET 4.0 Frameworkは、以前のバージョンの.NET(下位互換性)を使用して構築されたアプリを実行します...ただし、.NET 4.0を対象とするアプリは、.NET3.5Framework以前の環境では実行されません。

Webサイトを.NET4.0に変換します。

Webサイトを.NET4.0に変換/アップグレードする2つの方法。1)通常、新しいコピーを開いて4.0をターゲットにしている場合、Visual Studioは変換/アップグレードするかどうかを尋ねます([はい]を選択します)。2)Visual Studio(商用バージョン)内で、[Webサイト]タブ、[オプションの開始]、[ビルド...]をクリックすると、[ターゲットフレームワーク]を変更するためのオプションが表示されます...

于 2012-08-02T17:24:38.243 に答える