La propriété de navigation 'SenderId" n'est pas une propriété déclarée sur le type "Conversation"
Quand j'essaie de faire la mise à Jour de la Base de données, j'obtiens cette erreur:
La propriété de navigation 'SenderId" n'est pas une propriété déclarée sur le type "Conversation". Vérifiez qu'il n'a pas été explicitement exclues du modèle et qu'il est valide propriété de navigation.
Modifier
Je crois que le problème est dans la cartographie des relations entre la Conversation et l'Utilisateur, car la Conversation et l'Utilisateur sont connectés avec deux un de de nombreuses relations, c'est à dire la Conversation de deux clés étrangères pointant vers l'Utilisateur
Ici est de savoir comment l'Utilisateur et la Conversation sont connectés:
Utilisateur:
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; }
Conversation:
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; }
}
Ici est tout code:
Utilisateur:
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; }
Conversation:
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; }
}
Message
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; }
}
OriginalL'auteur hyperN | 2012-12-08
Vous devez vous connecter pour publier un commentaire.
Enfin j'ai trouvé la solution, erreur stupide. En matière de Conservation, il doit être
Et pas
Après que j'ai reçu l'erreur:
"L'introduction de la contrainte de CLÉ ÉTRANGÈRE 'FK_dbo.Conversations_dbo.Users_ReceiverId' sur la table 'Conversations' peut provoquer des cycles ou en cascade de plusieurs chemins. Spécifier on DELETE NO ACTION ou de la mise À JOUR, AUCUNE ACTION, ou modifier d'autres contraintes de CLÉ ÉTRANGÈRE.
N'a pas pu créer de contrainte. Voir les erreurs précédentes."
Et la solution est la suivante: dans DbContext ce code:
Je l'ai testé et maintenant tout fonctionne très bien =)
OriginalL'auteur hyperN
ces deux lignes marqué par erreur avec
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
attribut.la suppression de ces deux attributs à partir des propriétés.version corrigée devrait être :pouvez-vous code postal de l'Expéditeur et du destinataire ainsi?
Behnam Esmaili émetteur et le Récepteur sont en fait de l'Utilisateur, il y a deux 1 à plusieurs connexions à partir de Conversation à l'Utilisateur, Vous pouvez regarder dans le code, mais je vais pate que la partie exacte ici, j'ai donc ça va être plus facile à lire le code: Utilisateur
public virtual ICollection<Conversation> ConversationSenders { get; set; } public virtual ICollection<Conversation> ConversationRecievers { get; set; }
Behnam Esmail Conversation
[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; }
s'il vous plait modifier vous r'question, et d'y poster.
OriginalL'auteur Behnam Esmaili