2015-12-30 10 views
6

エンティティタイプのナビゲーション「タグ」を無視「Notepad.Models.Note」モデルに追加されていない、または無視しますまたはentityTypeは無視されます。は、または無視、またはentityTypeは

public class Note 
    { 
     public Note() 
     { 
      CreationDate = DateTime.Now; 
      Tags = new HashSet<Tag>(); 
      Parts = new HashSet<Part>(); 
     } 

     public int ID { get; set; } 
     public virtual ICollection<Tag> Tags { get; set; } 
     public virtual ICollection<Part> Parts { get; set; } 
     public DateTime? CreationDate { get; set; } 
    } 


public class Tag 
    { 
     public Tag() 
     { 
      Notes = new HashSet<Note>(); 
     } 

     public int ID { get; set; } 
     public string Name { get; set; } 

     public virtual ICollection<Note> Notes { get; set; } 
    } 

移行を追加しているときにそれが起こる:あなたはそれが起こると思いますなぜ

DNXのEFの移行は、dbdataの-c DataDbContext

を追加しますか?

EDIT: DataDbContext:

public class DataDbContext : DbContext 
    { 
     public DbSet<Note> Notes { get; set; } 
     public DbSet<Tag> Tags { get; set; } 
     public DbSet<Part> Parts { get; set; } 
    } 
+0

'Tag'のコードを表示 – dotctor

+1

DataDbContextにDbSet を追加しましたか? –

+0

@MarcinZablocki私は質問にそれを貼り付けました、あなたはすべてが正しいことを確認することができます – Piotrek

答えて

11

あなたはそこ多対多関係を有しています。ドキュメントに記載されているように:http://docs.efproject.net/en/latest/modeling/relationships.html#id21

ジョインテーブルを表すエンティティクラスのない多対多リレーションシップは、まだサポートされていません。ただし、多対多の関係は、結合表のエンティティ・クラスを組み込み、2つの別個の1対多の関係をマッピングすることで表現できます。

だから、このように、追加の "参加" クラスを作成する必要があります。

public class NoteTag 
    { 
     public int NoteId { get; set; } 
     public Note Note { get; set; } 

     public int TagId { get; set; } 
     public Tag Tag { get; set; } 
    } 

を、その後、タグにも

ICollection<NoteTag> NoteTags {set;get} 

にご注意クラスで

ICollection<Tag> Tags {set;get} 

を交換し、クラス:

ICollection<Note> Notes {set;get;} 

ICollection<NoteTags> NoteTags {set;get} 

、その後にDbContext方法をOnModelCreating上書き:私はEF 7を使用しています

protected override void OnModelCreating(ModelBuilder modelBuilder) 
     { 
      modelBuilder.Entity<NoteTag>() 
       .HasKey(t => new { t.NoteId, t.TagId }); 

      modelBuilder.Entity<NoteTag>() 
       .HasOne(pt => pt.Note) 
       .WithMany(p => p.NoteTags) 
       .HasForeignKey(pt => pt.NoteId); 

      modelBuilder.Entity<NoteTag>() 
       .HasOne(pt => pt.Tag) 
       .WithMany(t => t.NoteTags) 
       .HasForeignKey(pt => pt.TagId); 
     } 
+0

ありがとう、それは移行が正常に完了したようです。しかし、それは非常に奇妙です、私はエンティティのフレームワークで前に多くの関係を多くすることができると確信しています – Piotrek

+0

@ Ludwik11 EF6ではなく、EF7ではい、このエラーをstumpledし、なぜ私はここにそのテーブルには追加のプロパティがあるので、ブリッジテーブルを使って2つの1〜Nを実現しました! – Pascal

2

、この問題は私の週の終わりの約2時間かかりました。 私はこのようなプロファイルのクラスを持っています - -

[Table("Profile")] 
public class Profile 
{ 
    public Profile() 
    { 

    } 

    [Column(Order = 1)] 
    [Key]   
    public Guid ProfileID { get; set; } 
    [JsonIgnore] 
    public virtual ICollection<StudentLivingWith> StudentProfileMap { get; set; } 

    [JsonIgnore] 
    public virtual ICollection<StudentLivingWith> ParentProfileMap { get; set; } 
} 

私は「StudentLivingWith」という名前の、私の別の表のFキー参照としてのプロファイルIDを使用しています:) だから、ここでは簡単なソリューションです。 (名前がちょっと変わっているのは分かっています:))下のクラスでわかるように、「StudentProfileID」と「ParentProfileID」の両方の列は、「Profile」テーブルの同じ「profileID」列を参照しています。

[Table("StudentLivingWith")] 
public class StudentLivingWith 
{ 
    public StudentLivingWith() 
    { 

    } 

    [Column(Order = 1)] 
    [Key] 
    [DatabaseGenerated(DatabaseGeneratedOption.Identity)] 
    public int StudentLivingWithID { get; set; } 

    [Column(Order = 2)] 
    [ForeignKey("StudentProfileID")] 
    public Guid StudentProfileID { get; set; } 

    [Column(Order = 3)] 
    [ForeignKey("ParentProfileID")] 
    public Guid ParentProfileID { get; set; } 

    [JsonIgnore] 
    [InverseProperty("StudentProfileMap")] 
    public virtual ICollection<Profile> StudentProfile { get; set; } 

    [JsonIgnore] 
    [InverseProperty("ParentProfileMap")] 
    public virtual ICollection<Profile> ParentProfile { get; set; } 
}  

結論としては、参照に[InverseProperty]タグを追加するだけです。この簡単な解決策は私のためのトリックでした。

こちらがお役に立てば幸いです。ありがとう。

関連する問題