5

Wenn ich versuche, ein Update-Datenbank zu tun, ich diesen Fehler:Die Navigationseigenschaft 'SenderId' ist keine deklarierte Eigenschaft vom Typ 'Gespräch'

The navigation property 'SenderId' is not a declared property on type 'Conversation'. Verify that it has not been explicitly excluded from the model and that it is a valid navigation property.

bearbeiten

I Problem glauben ist in Zuordnungsbeziehungen zwischen Konversation und Benutzer, da Konversation und Benutzer mit zwei Ein-zu-Viele-Beziehungen verbunden sind, dh Konversation hat zwei Fremdschlüssel, die auf Benutzer zeigen:

Hier ist, wie Benutzer und Konversation verbunden sind:

Benutzer:

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; } 

Gespräch:

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; } 

} 

Hier ganze Code:

Benutzer:

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; } 

Gespräch:

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; } 
} 

Nachricht

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; } 
} 

Antwort

5

Schließlich fand ich habe Lösung, dummer Fehler. In Schutz sollte es

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

    public Guid SenderId { get; set; } 

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

    public Guid ReceiverId { get; set; } 

und nicht

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

Danach habe ich Fehler habe:

„FOREIGN KEY-Einschränkung 'FK_dbo.Conversations_dbo.Users_ReceiverId' Einführung in die Tabelle 'Gespräche' verursachen Zyklen oder mehrere Kaskadenpfade. Geben Sie ON DELETE NO ACTION oder ON UPDATE NO ACTION an, oder ändern Sie andere FOREIGN KEY-Einschränkungen. Constraint konnte nicht erstellt werden. Siehe vorherige Fehler. "

Und Lösung ist: in DbContext diesen Code:

 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); 

Ich habe es getestet und jetzt alles funktioniert =)

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

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

diese beiden Linie mit [DatabaseGenerated(DatabaseGeneratedOption.Identity)] markiert fälschlicherweise attribute.remove diese beiden Attribute von properties.corrected Version sein sollte:

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

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

ich sie entfernt, aber immer noch derselbe Fehler – hyperN

+0

können Sie Code für Sender und Post Empfänger auch? –

+0

@ Behnam Esmaili Sender und Empfänger sind eigentlich Benutzer, es gibt zwei 1 zu viele Verbindungen von Konversation zum Benutzer, Sie können sie in Code nachschlagen, aber ich werde diesen genauen Teil hier pate, also werde ich es einfacher sein read code: Benutzer 'öffentliche virtuelle ICollection ConversationSenders {get; einstellen; } öffentliche virtuelle ICollection ConversationRecievers {get; einstellen; } ' – hyperN

Verwandte Themen