5

、私はこのエラーを取得するタイプ「会話」に関する宣言されたプロパティではありません会話とユーザーは2つの1対多の関係に接続されているため、対話とユーザーのマッピング関係にあります。ナビゲーションプロパティ「SENDERIDは、」私は更新-データベースをしようとすると

ユーザーと会話の接続方法は次のとおりです。

ユーザー:

public class User 
{ 
    [Key] 
    [HiddenInput(DisplayValue = false)] 
    [DatabaseGenerated(DatabaseGeneratedOption.Identity)] 
    public Guid UserId { get; set; } 

    public virtual ICollection<Conversation> ConversationSenders { get; set; } 
    public virtual ICollection<Conversation> ConversationRecievers { get; set; } 

会話:

ユーザー:

public class User 
{ 
    [Key] 
    [HiddenInput(DisplayValue = false)] 
    [DatabaseGenerated(DatabaseGeneratedOption.Identity)] 
    public Guid UserId { get; set; } 


    [DatabaseGenerated(DatabaseGeneratedOption.Identity)] 
    public Guid CollegeId { get; set; } 

    public int RoleId { get; set; } 

    [Required] 
    [DataType(DataType.EmailAddress)] 
    public string Email { get; set; } 

    [Required] 
    [DataType(DataType.Password)] 
    public string Password { get; set; } 

    [Required] 
    public string Name { get; set; } 

    [Required] 
    public string Surname { get; set; } 

    public string Gender { get; set; } 

    //role 

    public DateTime? DateOfBirth { get; set; } 


    public string ImageURL { get; set; } 

    [ForeignKey("CollegeId")] 
    public virtual College College { get; set; } 

    [ForeignKey("RoleId")] 
    public virtual UserRole UserRole { get; set; } 

    public virtual ICollection<Advert> Adverts { get; set; } 
    public virtual ICollection<Competition> Competitions { get; set; } 
    public virtual ICollection<Message> Messages { get; set; } 
    public virtual ICollection<Conversation> ConversationSenders { get; set; } 
    public virtual ICollection<Conversation> ConversationRecievers { get; set; } 
    public virtual ICollection<UserOS> UserOses { get; set; } 

会話:

ここ
public class Conversation 
{ 
    [Key] 
    [HiddenInput(DisplayValue = false)] 
    public Guid ConversationId { get; set; } 

    [ForeignKey("SenderId")] 
    public Guid SenderId { get; set; } 

    [ForeignKey("RecieverId")] 
    public Guid RecieverId { get; set; } 

    [InverseProperty("ConversationSenders")] 
    public virtual User Sender { get; set; } 

    [InverseProperty("ConversationRecievers")] 
    public virtual User Reciever { get; set; } 

} 

は、全体のコードです

public class Message 
{ 
    [Key] 
    [HiddenInput(DisplayValue = false)] 
    [DatabaseGenerated(DatabaseGeneratedOption.Identity)] 
    public Guid MessageId { get; set; } 

    [HiddenInput(DisplayValue = false)] 
    public Guid UserId { get; set; } 

    [HiddenInput(DisplayValue = false)] 
    public Guid ConversationId { get; set; } 

    public string Text { get; set; } 

    public bool? IsSeen { get; set; } 


    [ForeignKey("UserId")] 
    public virtual User ConversationSender { get; set; } 

    [ForeignKey("ConversationId")] 
    public virtual Conversation Conversation { get; set; } 
} 

答えて

5

最後に私が見つけました解決策、愚かな間違い。保全では、私はエラーを得た。その後

[ForeignKey("Sender"), Column(Order = 0)] 

    public Guid SenderId { get; set; } 

    [ForeignKey("Receiver"), Column(Order = 1)] 

    public Guid ReceiverId { get; set; } 

そしてない

[ForeignKey("SenderId"), Column(Order = 0)] 
[ForeignKey("ReceiverId"), Column(Order = 1)] 

次のようになります。

「FOREIGN KEY制約を紹介 'FK_dbo.Conversations_dbo.Users_ReceiverId' テーブルの上に '会話' 可能性がありサイクルまたは複数のカスケードパスを指定します。ON DELETE NO ACTIONまたはON UPDATE NO ACTIONを指定するか、他のFOREIGN KEY制約を変更してください。 制約を作成できませんでした。

そしてソリューションです:DbContextでこのコード:

 modelBuilder.Entity<Conversation>() 
      .HasRequired(s => s.Sender) 
      .WithMany(s => s.ConversationSenders) 
      .HasForeignKey(s => s.SenderId) 
      .WillCascadeOnDelete(false); 


     modelBuilder.Entity<Conversation>() 
      .HasRequired(r => r.Receiver) 
      .WithMany(r => r.ConversationReceivers) 
      .HasForeignKey(r => r.ReceiverId) 
      .WillCascadeOnDelete(false); 

私はそれをテストしてみた今ではすべてが=正常に動作します)

0
[ForeignKey("SenderId")] 
[DatabaseGenerated(DatabaseGeneratedOption.Identity)] 
public Guid SenderId { get; set; } 

[ForeignKey("RecieverId")] 
[DatabaseGenerated(DatabaseGeneratedOption.Identity)] 
public Guid RecieverId { get; set; } 
public class Conversation 
{ 
    [Key] 
    [HiddenInput(DisplayValue = false)] 
    [DatabaseGenerated(DatabaseGeneratedOption.Identity)] 
    public Guid ConversationId { get; set; } 

    [ForeignKey("SenderId")] 
    [DatabaseGenerated(DatabaseGeneratedOption.Identity)] 
    public Guid SenderId { get; set; } 

    [ForeignKey("RecieverId")] 
    [DatabaseGenerated(DatabaseGeneratedOption.Identity)] 
    public Guid RecieverId { get; set; } 

    [InverseProperty("ConversationSenders")] 
    public virtual User Sender { get; set; } 

    [InverseProperty("ConversationRecievers")] 
    public virtual User Reciever { get; set; } 

    public virtual ICollection<Message> Messages { get; set; } 
} 

メッセージが誤ってproperties.correctedのバージョンからこれらの二つの属性attribute.remove [DatabaseGenerated(DatabaseGeneratedOption.Identity)]でマークされたこれらの2行は次のようになります。

[ForeignKey("User")]  
public Guid SenderId { get; set; } 

[ForeignKey("User")] 
public Guid RecieverId { get; set; } 
+0

私はそれらを削除し、それでも同じエラー – hyperN

+0

あなたは、送信者のためのコードを投稿することができますし、受信機も同様に? –

+0

@ Behnam Esmaili 送信者と受信者は実際にはユーザーですが、会話からユーザーへの1対多の接続が2つあります。コードでそれらを検索することはできますが、ここでその部分を確認することができますコードを読んでください: ユーザー 'public virtual ICollection <会話> ConversationSenders {get;セット; } public仮想ICollection <会話> ConversationRecievers {get;セット; Behnam Esmail 会話 '[ForeignKeyの( "のSenderID")] 公共のGuidのSenderID {得る@} ' – hyperN

関連する問題