2016-08-06 4 views
1

参加し、これはEF CodeFirst AddColumn関数は、だから私は、ASPのアイデンティティApplicationUserがFriendRequestsを持って を使用している関係

public class ApplicationUser : IdentityUser 
{ 
    public ApplicationUser() 
    { 
      FriendRequests = new Collection<ApplicationUser>(); 
    } 

    public virtual ICollection<ApplicationUser> FriendRequests {get; set;} 

} 

そして、ここでは私の流暢のAPIマッピングである私がやったことある

  modelBuilder.Entity<ApplicationUser>() 
     .HasMany(x => x.FriendRequests) 
     .WithMany() 
     .Map(x => 
       { 
        x.MapLeftKey("UserRequestingID"); 
        x.MapRightKey("UserBeingRequestedID"); 
        x.ToTable("FriendRequests"); 
       }); 

これは、2つの列 "UserRequestingID"と "UserBeingRequestedID"を持つテーブル "FriendRequests"を作成します。

このテーブルに「isIgnored」列を追加したいのですが、どうすればいいですか? 私はこのようにすることもできますか?それとも私は新しいクラスを作成するのか?

ありがとうございました。

答えて

1

many-to-manyマッピング経由の関係は、接合テーブルにPK以外の列が含まれていない場合にのみサポートされます。したがって、追加の列を含める場合は、明示的なエンティティを作成し、2 one-to-manyの関係を設定する必要があります。このような

何か:

モデル:

public class ApplicationUser : IdentityUser 
{ 
    // ... 
    public virtual ICollection<FriendRequest> FriendRequests {get; set;} 
    public virtual ICollection<FriendRequest> FriendRequested {get; set;} 
} 

public class FriendRequest 
{ 
    public string UserRequestingID { get; set; } 
    public string UserBeingRequestedID { get; set; } 
    public bool IsIgnored { get; set; } 
    public virtual ApplicationUser UserRequesting { get; set; } 
    public virtual ApplicationUser UserBeingRequested { get; set; } 
} 

構成:非常に有益だった

modelBuilder.Entity<FriendRequest>() 
    .HasKey(e => new { e.UserRequestingID, e.UserBeingRequestedID }); 

modelBuilder.Entity<FriendRequest>() 
    .HasRequired(e => e.UserRequesting) 
    .WithMany(e => e.FriendRequests) 
    .HasForeignKey(e => e.UserRequestingID) 
    .WillCascadeOnDelete(); 

modelBuilder.Entity<FriendRequest>() 
    .HasRequired(e => e.UserBeingRequested) 
    .WithMany(e => e.FriendRequested) 
    .HasForeignKey(e => e.UserBeingRequestedID) 
    .WillCascadeOnDelete(); 
+0

ありがとう! – Willy

関連する問題