2

問題のあるテーブルが 2 つあります。

  • 最初の表はユーザーに関するもので、- がありuserId, username, password, etcます。

  • 2 番目はメッセージの処理であるため、messageId, senderId, receiverId,messageContent があります。

ご覧のとおり、 と の両方senderIdreceiverIdusers テーブルの userId に関連付ける必要があります。

しかし、Code First を使用しようとすると、クラッシュするだけです。例外が発生します:

「テーブル 'Messages' に FOREIGN KEY 制約 'FK_dbo.Messages_dbo.Users_ReceiverId' を導入すると、サイクルまたは複数のカスケード パスが発生する可能性があります。ON DELETE NO ACTION または ON UPDATE NO ACTION を指定するか、他の FOREIGN KEY 制約を変更してください。」

これは私がメッセージクラスで関係を作った方法です:

    [ForeignKey("Sender")]
    public int SenderId { get; set; }
    public virtual User Sender { get; set; }

    [ForeignKey("Receiver")]
    public int ReceiverId { get; set; }
    public virtual User Receiver { get; set; }

何か案は?私は今立ち往生しています。データベースを最初に実行すると問題なく動作しますが、コードを最初に実行するとうまくいきません。

4

4 に答える 4

0

Migrationsフォルダーに生成された .csファイルをに置き換えます。たとえば、次のようになります。cascadeDelete: truecascadeDelete: false

AddForeignKey("dbo.Messages", "ReceiverId", "dbo.Users", "Id", 
    cascadeDelete: true);
AddForeignKey("dbo.Messages", "SenderId", "dbo.Users", "Id", 
    cascadeDelete: true);

なる:

AddForeignKey("dbo.Messages", "ReceiverId", "dbo.Users", "Id", 
    cascadeDelete: false);
AddForeignKey("dbo.Messages", "SenderId", "dbo.Users", "Id", 
    cascadeDelete: false);
于 2013-10-30T15:38:07.217 に答える
0

あなたの答えはこの記事にあると思います

Entity Framework 4.1 InverseProperty 属性

InverseAttrivuteProperty と呼ばれる別のデコレーターがあり、元のテーブルの関係のどの端が宛先のテーブルのどの端に一致するかを定義するのに役立ちます。

ただし、説明どおりに使用しないでください。あなたのデコレータを外部キーに残さなければなりませんでした。

テストしたところ、うまくいきました。すぐに説明的なものを投稿します。

于 2013-12-19T21:06:15.580 に答える