2016-04-07 25 views
1

asp.net(バージョン5のMVCを使用)を初めて使用しましたが、私はそれを学びたいと考えています。 多対多の関係のためにDbContextを使いたいと思っていて、いくつかのチュートリアルを見てみました。Entity Frameworkの多対多リレーションシップのエラー

私は困惑だと助けを強くお願い申し上げ「コレクションナビゲーションBuilderは、メソッドWithManyが含まれていません」 - 私は

は間違いを得ます。

私の2つのモデルクラスは、dbコンテキストの下に掲載されています。

namespace WebApplication2.Models 
{ 
    public class ApplicationDbContext : IdentityDbContext<ApplicationUser> 
    { 
     public DbSet<ApplicationUser> ApplicationUsers { get; set; } 
     public DbSet<Caretaker> CareTakers { get; set; } 
     public DbSet<Child> Children { get; set; } 
     public DbSet<Fee> Fees { get; set; } 
     public DbSet<Feetype> Feetypes { get; set; } 
     public DbSet<Message> Messages { get; set; } 
     public DbSet<Photo> Photos { get; set; } 

     protected override void OnModelCreating(ModelBuilder builder) 
     { 
      base.OnModelCreating(builder); 

      // 
      builder.Entity<Caretaker>() 
        .HasMany<Child>(c => c.Children) 
        .WithMany 
    //  .WithMany(s => s.ApplicationUsers) 
     // .Map(t => t.MapLeftKey("CourseId") 
     // .MapRightKey("StudentId") 
     // .ToTable("CourseStudent")); 

     } 
    } 
} 

名前空間WebApplication2.Models {

public class Caretaker 
{ 

    public Caretaker(string Name, string LastName, string Gender, DateTime Bday, string Email,string Phone) { 
     this.Name = Name; 
     this.LastName = LastName; 
     this.Gender = (Gender)Enum.Parse(typeof(Gender), Gender); 
     this.Bday = Bday; 
     this.Email = Email; 
     this.Phone = Phone; 
     Children = new List<Child>(); 

    } 

    [ScaffoldColumn(false)] 
    public int CareTakerID { get; set; } 

    public Gender Gender { get; set; } 
    public string Name { get; set; } 
    public string LastName { get; set; } 
    public DateTime Bday { get; set; } 
    public string Email { get; set; } 
    public string Phone { get; set; } 



    public virtual ICollection<Child> Children { get; set; } 
} 

}

using System.Linq; 
using System.Threading.Tasks; 
using System.ComponentModel.DataAnnotations; 

namespace WebApplication2.Models 
{ 

    public enum Gender { Male, Female } 

    public class Child 
    { 

    public Child(string Name,string LastName, string Gender,DateTime Bday) 
     { 
     this.Name = Name; 
     this.LastName = LastName; 
     this.Gender = (Gender)Enum.Parse(typeof(Gender), Gender); 
     this.Bday = Bday; 
     Photos = new List<Photo>(); 
     Caretakers = new List<Caretaker>(); 
     ApplicationUsers = new List<ApplicationUser>(); 
     Fees = new List<Fee>(); 
     } 

     [ScaffoldColumn(false)] 
     public int ChildID { get; set; } 

     public String Name { get; set; } 
     public String LastName { get; set; } 

     public Gender Gender { get; set; } 

     public DateTime Bday { get; set; } 


     public ICollection<Photo> Photos { get; set; } 
     public virtual ICollection<Caretaker> Caretakers { get; set; } 
     public virtual ICollection<ApplicationUser> ApplicationUsers { get; set; } 

     public ICollection<Fee> Fees { get; set; } 




    } 
} 

答えて

1

あなたのモデルはOKに見えますが、お使いの流暢なコードがオフになっています。あなたは試してみました:

protected override void OnModelCreating(ModelBuilder builder) 
{ 
    base.OnModelCreating(builder); 

    builder.Entity<Caretaker>() 
      .HasMany(t => t.Children) 
      .WithMany(t => t.Caretakers) 
      .Map(m => { 
         m.ToTable("CaretakerChild"); 
         m.MapLeftKey("CaretakerID"); 
         m.MapRightKey("ChildID"); 
        }); 
} 

https://msdn.microsoft.com/en-us/data/jj591620.aspx?f=255&MSPPError=-2147217396#ManyToMany

+0

を私が間違えていた場合、私は申し訳ないが、私はそれをcopypastingことで、あなたのコードを使用してみました。 モデルビルダが現在のコンテキストに存在しないというエラーを受け取りました。 以前使用していたビルダーを使用しても問題は残ります。 説明してください。 私はyor答えをありがとうございます。 – Greenmachine

+1

OK、あなたはあなたのビルダーと呼ばれました。答えを編集します。 –

+0

はい、それは私が挿入したコードです。 まだ私はOPで説明したエラーがまだあります。 私はあなたの答えをありがとうございます。 – Greenmachine

関連する問題