2011-01-15 3 views
4

J'ai récemment téléchargé Entity Framework Code First CTP5, et j'ai un problème avec ce scénario. J'ai deux tables comme suit:Code EF Tout d'abord, comment puis-je obtenir deux clés étrangères d'une table vers une autre table?

 
Members table : 
    ID 
    Name 

Comments table : 
    ID 
    Comment 
    CommentedMemberID 
    CommentMemberID 

Et, les données doivent être comme les suivantes:

 
Members 
ID Name 
1 Mike 
2 John 
3 Tom 

Comments 
ID Comment CommentedMemberID CommentMemberID 
1 Good 1 2  
2 Good 1 3 
3 Bad 2 1 

Ensuite, je codifiés comme indiqué ci-dessous:

public class Member 
{ 
    public int ID {get; set; } 
    public string Name { get; set;} 
    public virtual ICollection<Comment> Comments { get; set;} 
} 

public class Comment 
{ 
    public int ID { get; set; } 
    public string Comment { get; set; } 
    public int CommentedMemberID { get; set; } 
    public int CommentMemberID{ get; set; } 

    public virtual Member CommentedMember { get; set; } 
    public virtual Member CommentMember { get; set; } 
} 

public class TestContext : DbContext 
{ 
    public DbSet<Member> Members { get; set; } 
    public DbSet<Comment> Comments { get; set; } 
} 

Mais quand je lance ces modèles sur mon cshtml, il me donne des erreurs en disant "Impossible de créer CommentMember instance" ou quelque chose comme ça (Désolé, j'ai déjà changé mes modèles pour procéder à la première évaluation EF Code, donc ne peut pas reproduire la même erreur).

J'ai également essayé d'utiliser OnModelCreating sur le TestContext, mais je ne trouve aucune bonne instruction et je ne sais pas quoi faire. J'ai vu un billet de blog de l'EF Code First CTP3, et il semble qu'il y avait un attribut RelatedTo dans cette version, mais maintenant il est parti.

Quelqu'un pourrait-il savoir comment le faire fonctionner correctement? Ou est-ce un mauvais moyen d'aller avec ce scénario?

Merci,
Yoo

Répondre

6

Ceci est un cas particulier et vous devez utiliser l'API couramment pour configurer vos associations. Cela fera l'affaire:

protected override void OnModelCreating(ModelBuilder modelBuilder) 
{ 
    modelBuilder.Entity<Comment>().HasRequired(c => c.CommentedMember) 
            .WithMany(m => m.Comments) 
            .HasForeignKey(c => c.CommentedMemberID) 
            .WillCascadeOnDelete(); 

    modelBuilder.Entity<Comment>().HasRequired(c => c.CommentMember) 
            .WithMany() 
            .HasForeignKey(c => c.CommentMemberID) 
            .WillCascadeOnDelete(false); 
} 
+1

Merci beaucoup. Cela a fait l'affaire! Je vais jeter un coup d'oeil à l'API couramment car je ne comprends toujours pas comment ça marche :) –

Questions connexes