Код EF Во-первых, как мне получить два внешних ключа из одной таблицы в другую? - PullRequest
4 голосов
/ 15 января 2011

Я недавно скачал Entity Framework Code First CTP5, и у меня проблемы с этим сценарием. У меня есть две таблицы следующим образом:

Members table :
  ID  
  Name

Comments table :  
  ID  
  Comment  
  CommentedMemberID  
  CommentMemberID  

И данные должны быть такими:

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  

Затем я кодировал, как показано ниже:

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

Но когда я запускаю эти модели на своем cshtml, он выдает мне сообщение об ошибке «Не удается создать CommentMember экземпляр» или что-то в этом роде (Извините, я уже изменил свои модели, чтобы продолжить оценку EF Code First, поэтому не воспроизводить ту же ошибку).

Я также пытался использовать OnModelCreating на TestContext, но не могу найти хороших инструкций и не знаю, что делать. Я видел запись в блоге EF Code First CTP3, и похоже, что в этой версии был атрибут RelatedTo, но теперь он исчез.

Может кто-нибудь знать, как заставить его работать должным образом? Или это совершенно неверный путь в этом сценарии?

Спасибо
Yoo

1 Ответ

6 голосов
/ 15 января 2011

Это особый случай, и вам нужно использовать свободный API для настройки ваших ассоциаций. Это сделает свое дело:

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);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...