2016-11-29 12 views
0

同じ結合テーブルを使用して2つのM:Mリレーションシップを作成できますか?同じ結合テーブルを使用して複数の多対1リレーションシップを作成する方法[EF7/Core]

私は次のような状況があり、例外受け付けております:タグに

Unhandled Exception: System.InvalidOperationException: Cannot create a relationship between 'ApplicationUser.ExpertTags' and 'UserTag.User', because there already is a relationship between 'ApplicationUser.StudyTags' and 'UserTag.User'. Navigation properties can only participate in a single relationship

:ApplicationUserで

public class Tag { 
    public Tag() { 
     Users = new List<UserTag>(); 
    } 
    public int TagId { get; set; } 
    public string Name { get; set; } 
    public string Description { get; set; } 

    public ICollection<UserTag> Users { get; set; } 

を:

public class ApplicationUser : IdentityUser 
{ 
    public ApplicationUser() 
    { 
     StudyTags = new HashSet<UserTag>(); 
     ExpertTags = new HashSet<UserTag>(); 
    } 

    public string FirstName { get; set; } 
    public string LastName { get; set; } 
    public string Location { get; set; } 
    public ICollection<UserTag> StudyTags { get; set; } 
    public ICollection<UserTag> ExpertTags { get; set; } 
} 

UserTagで(CLR参加) :

ApplicationDbContextで
public class UserTag 
{ 
    public string UserId { get; set; } 
    public ApplicationUser User { get; set; } 

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

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

     modelBuilder.Entity<UserTag>() 
      .HasKey(x => new { x.UserId, x.TagId }); 

     modelBuilder.Entity<UserTag>() 
      .HasOne(ut => ut.User) 
      .WithMany(u => u.StudyTags) 
      .HasForeignKey(ut => ut.UserId); 

     modelBuilder.Entity<UserTag>() 
      .HasOne(ut => ut.User) 
      .WithMany(u => u.ExpertTags) 
      .HasForeignKey(ut => ut.UserId); 

     modelBuilder.Entity<UserTag>() 
      .HasOne(ut => ut.Tag) 
      .WithMany(t => t.Users) 
      .HasForeignKey(ut => ut.TagId); 
    } 

は、私は別のCLRクラスを作成する必要がありますか? UserStudyTagUserExpertTagのようなもの?

ありがとうございます!

答えて

1

SQL DBにステップダウンします。テーブルUserTagに1つのUserIdフィールドが必要です。このテーブルのどのレコードがStudyTagsに関連し、ExpertTagsコレクションに関連していますか?

何かを複製する必要があります。

いずれかの2つのテーブル(UserStudyTagUserExpertTag)にUserTagを分割、またはUserTagで2つのUserIdのフィールドを作り、ExpertUserIdStudyUserIdを言います。両方ともnullableで、各レコードに値が1つしかありません。

+0

ありがとうございました。私は2つの別々のテーブルを使用して終了しました。 – Fedoranimus

関連する問題