2016-12-03 6 views
2

私は2つのモデルと2つのモデルを接続しています。エンティティフレームワークのASP.NETコアが多対多で動作しない

Organizationモデル:

using System; 
using System.Collections.Generic; 
using System.ComponentModel.DataAnnotations; 

namespace Verbonding.Models 
{ 
    public class Organization 
    { 
     public int Id { get; set; } 
     public string Name { get; set; } 

     public ICollection<OrganizationApplicationUser> OrganizationApplicationUsers { get; set; } 

     public Organization() 
     { 
      IsActive = true; 
      IsBlocked = false; 
      DateCreated = DateTime.Now; 
      DateUpdated = DateTime.Now; 
     } 

     public ApplicationUser AddUser(ApplicationUser user) 
     { 
      OrganizationApplicationUser ou = new OrganizationApplicationUser { ApplicationUser = user, Organization = this }; 

      OrganizationApplicationUsers.Add(ou); 
      return user; 
     } 
    } 
} 

ApplicationUserモデル:私はまた、OnModelCreating方法にこのコードを追加

using Microsoft.AspNetCore.Identity.EntityFrameworkCore; 
using Microsoft.EntityFrameworkCore; 
using Verbonding.Models; 

namespace Verbonding.Data 
{ 
    public class ApplicationDbContext : IdentityDbContext<ApplicationUser> 
    { 
     public ApplicationDbContext(DbContextOptions<ApplicationDbContext> options) 
      : base(options) 
     { 
     } 

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

      builder.Entity<OrganizationApplicationUser>().HasKey(x => new { x.OrganizationId, x.ApplicationUserId }); 
     } 

     public DbSet<Country> Countries { get; set; } 
     public DbSet<Address> Addresses { get; set; } 
     public DbSet<Organization> Organizations { get; set; } 
     public DbSet<Category> Categories { get; set; } 
     public DbSet<Event> Events { get; set; } 
     public DbSet<OrganizationApplicationUser> OrganizationApplicationUsers { get; set; } 
    } 
} 

いくつかの研究の後:

using System; 
using Microsoft.AspNetCore.Identity.EntityFrameworkCore; 
using System.Linq; 

namespace Verbonding.Models 
{ 
    public class ApplicationUser : IdentityUser 
    { 
     public bool IsActive { get; set; } 

     public IQueryable<OrganizationApplicationUser> OrganizationApplicationUsers { get; set; } 

     public ApplicationUser():base() 
     { 
      IsActive = true; 
      IsBlocked = false; 
      DateJoined = DateTime.Now; 
      DateUpdated = DateTime.Now; 
     } 

     public IQueryable<Organization> GetOrganizations() 
     { 
      return OrganizationApplicationUsers.Select(x => x.Organization); 
;  } 
    } 
} 

DbContext

私は OrganizationApplicationUsersnullままであることが分かったデバッガを使用して
builder.Entity<OrganizationApplicationUser>() 
    .HasOne(ou => ou.Organization) 
    .WithMany(o => o.OrganizationApplicationUsers) 
    .HasForeignKey(ou => ou.Organization); 

builder.Entity<OrganizationApplicationUser>() 
    .HasOne(ou => ou.ApplicationUser) 
    .WithMany(u => u.OrganizationApplicationUsers) 
    .HasForeignKey(ou => ou.ApplicationUserId); 

これを修正するにはどうすればよいですか?

+0

あなたの命名は少し混乱しています。あなたが 'Organization.OrganizationApplicationUsers'または' ApplicationDbContext.OrganizationApplicationUsers'を意味しますかnullのままですか? –

+0

* *は 'null 'のままですか?遅延ロードが予想される場合 - それは(まだ)サポートされていません。 –

答えて

0

エンティティ間の多対多の関係としたい場合は、をOrganizationに直接リンクする必要があります(エンティティフレームワークは間にテーブルを作成しますが、それについて知っている。

それ以外

ApplicationUserで、それはIColletionなくIQueryableでなければなりません。

関連する問題