5

, bu hatayı alıyorum tip 'Konuşma' konulu bildirilen özelliği değildir Konuşma ve Kullanıcı arasındaki ilişkiyi eşleştirirken, Konuşma ve Kullanıcı ikiden fazla ilişkiyle bağlantılıdır, örn. Görüşme, Kullanıcıya işaret eden iki yabancı tuşa sahiptir.navigasyon özelliği 'SenderID' ı Güncelleme-Veritabanı yapmaya çalıştığınızda

Kullanıcı ve Görüşmenin nasıl bağlandığı:

Kullanıcı:

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

Konuşma:

Kullanıcı:

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

Konuşma:

İşte
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; } 

} 

bütün koddur

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

yanlışlıkla properties.corrected sürümden bu iki özelliğin attribute.remove [DatabaseGenerated(DatabaseGeneratedOption.Identity)] işaretlenmiş bu iki çizgi olmalıdır

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

cevap

5

buldum çözüm, aptal hata.

" 'Konuşmalar' masaya FOREIGN KEY kısıtlaması 'FK_dbo.Conversations_dbo.Users_ReceiverId' Tanıtımı neden olabilir: Koruma yılında

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

    public Guid SenderId { get; set; } 

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

    public Guid ReceiverId { get; set; } 

Ve hata var Bundan sonra değil

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

olmalıdır Döngüleri veya birden çok basamaklı yolu Açık ETMEYİ AÇIK veya EYLEM YAPMAK ÜZERİNDE AÇIK veya diğer YABANCI ANAHTAR kısıtlarını değiştirin. Kısıtlama oluşturulamadı. Önceki hataları görün.

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

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

Mesaj:

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

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

Onları kaldırıldı ama yine aynı hata – hyperN

+0

sen Gönderen kodunu gönderebilir ve) =

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

bunu test ettik ve şimdi her şey gayet iyi çalışıyor: DBContext bu kodu:

Ve çözüm

olduğunu Alıcı da mı? –

+0

@ Behnam Esmaili Gönderici ve Alıcı aslında Kullanıcıdır, Sohbet'den Kullanıcıya kadar birçok bağlantı var. Bunları kod olarak görebilirsin, ama ben burada kesin bir parçaya değineceğim, böylece daha kolay olacak kodu oku: Kullanıcı 'public virtual ICollection KonuşmaSürücüler {get; set; } kamu sanal ICollection KonuşmaSürümeyenler {get; set; } ' – hyperN

İlgili konular