0

と関係を持っている:Entity Frameworkの - 3つの表は次のように私は3つのテーブルを持って互いに

ApplicationUser:

public class ApplicationUser : IdentityUser 
{ 
    ..some basic properties.. 

    // navigation properties 
    public virtual ICollection<Post> Posts { get; set; } 
    public virtual ICollection<Album> Albums { get; set; } 
} 

ポスト

public class Post 
{ 
     public long Id { get; set; }  
     public string Content { get; set; } 

     public int? AlbumId { get; set; } 
     public string UserId { get; set; } 

     public virtual ApplicationUser User { get; set; } 
     public virtual Album Album { get; set; } 
} 

アルバム

public class Album 
{ 
     public int Id { get; set; } 
     public string Name { get; set; } 
     public string UserId { get; set; } 

     public virtual ApplicationUser User { get; set; } 
     public virtual ICollection<Post> Posts { get; set; } 
} 

し、最終的にApplicationDbContext:私は、移行および更新データベースを実行すると

modelBuilder.Entity<ApplicationUser>() 
       .HasMany(a=>a.Posts) 
       .WithRequired(a=>a.User) 
       .HasForeignKey(a=>a.UserId) 
       .WillCascadeOnDelete(false); 
modelBuilder.Entity<Post>() 
       .HasKey(p => p.Id); 

modelBuilder.Entity<Album>() 
       .HasKey(a => a.Id); 

modelBuilder.Entity<ApplicationUser>() 
       .HasMany(u=>u.Albums) 
       .WithOptional() 
       .HasForeignKey(a=>a.UserId) 
       .WillCascadeOnDelete(); 

modelBuilder.Entity<Album>() 
       .HasMany(a=>a.Posts) 
       .WithRequired() 
       .HasForeignKey(p=>p.AlbumId) 
       .WillCascadeOnDelete(); 

、私はエラーを取得:彼らは競合なぜ

The ALTER TABLE statement conflicted with the FOREIGN KEY constraint "FK_dbo.Posts_dbo.Albums_AlbumId". The conflict occurred in database "aspnet-Link-20161012104217", table "dbo.Albums", column 'Id'.

誰もが私に教えてもらえますか?それは私にはかなり正当だと思われる。

あなたが nullableとして​​を設定するが、設定で WithRequeired()を定義し、あなたのコードで

答えて

1

//Ef by default conventions set the AlbumId as foreign key 
modelBuilder.Entity<Album>() 
      .HasMany(a=>a.Posts) 
      .WithOptional(a=>a.Album); 

と​​がnullable変更されていない場合:

public class Post 
{ 
    public long Id { get; set; }  
    public string Content { get; set; } 

    public int? AlbumId { get; set; }  //<-- this one 
    public string UserId { get; set; } 

    public virtual ApplicationUser User { get; set; } 
    public virtual Album Album { get; set; } 
} 

modelBuilder.Entity<Album>() 
      .HasMany(a=>a.Posts) 
      .WithRequired() //<-- this one 
      .HasForeignKey(p=>p.AlbumId) 
      .WillCascadeOnDelete(); 

​​た場合は、設定を変更する必要がありますnullableですプロパティ:

public class Post 
{ 
    public long Id { get; set; }  
    public string Content { get; set; } 

    public int AlbumId { get; set; }  
    public string UserId { get; set; } 

    public virtual ApplicationUser User { get; set; } 
    public virtual Album Album { get; set; } 
} 

と、次の構成を使用します。これは問題ではありません

//Ef by default conventions set the AlbumId as foreign key 
modelBuilder.Entity<Album>() 
      .HasMany(a=>a.Posts) 
      .WithRequired(a=>a.Album) 
      .WillCascadeOnDelete(); 
+0

を。モデルビルダは常にFKタイプをオーバーライドします。問題は、FKの制約に違反しているため、アルバムがない(または存在しない)ポストがあることです。 – DevilSuichiro

+0

それは動作します、ありがとう、私は "WithRequired"は各アルバムがブログを持っている必要があり、 – LaXuanLinh

関連する問題