2013-08-09 2 views
1

J'ai 2 entités. Utilisateur et message Un message a un expéditeur et un destinataire. Les deux sont des utilisateurs. Je souhaite exposer les propriétés de navigation de l'utilisateur pour "SentMessages" et "ReceivedMessages". Quelle configuration Fluent est requise pour définir ceci? J'ai essayé un certain nombre de combinaisons et le maintenir dans une exception:Relations multiples entre les mêmes entités (expéditeur et destinataire)

Présentation de contrainte FOREIGN KEY « FK_dbo.Message_dbo.User_Recipient_Id » sur la table « message » peut provoquer des cycles ou des chemins en cascade multiples. Spécifiez ON DELETE NO ACTION ou ON UPDATE NO ACTION ou modifiez d'autres contraintes FOREIGN KEY.

Mes entités ressemblent:

public class User{ 
public int Id {get;set;} 
public virtual IEnumerable<Message> SentMessages {get;set;} 
public virtual IEnumerable<Message> ReceivedMessages {get;set;} 
} 

public class Message{ 
public int Id {get;set;} 
public string Content {get;set;} 
public virtual User Sender{get;set;} 
public virtual User Recipient{get;set;} 
} 

Répondre

0

Vous devez désactiver la suppression en cascade via l'API Fluent. Vous pouvez le faire dans votre classe de contexte:

protected override void OnModelCreating(DbModelBuilder modelBuilder) 
     { 

      modelBuilder.Entity<Message>() 
         .HasRequired(a => a.Sender) 
         .WithMany() 
         .HasForeignKey(u => u.Sender).WillCascadeOnDelete(false); 

      modelBuilder.Entity<Message>() 
      .HasRequired(a => a.Recipient) 
      .WithMany() 
      .HasForeignKey(u => u.Recipient).WillCascadeOnDelete(false); 
     } 
Questions connexes