0

RoleProvider に PostGre を使用しています。それは私のDbContextです。

public class MembershipDbContext : DbContext
{
    public DbSet<User> Users { get; set; }
    public DbSet<Role> Roles { get; set; }
    public DbSet<RoleUser> RoleUsers { get; set; }

    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        modelBuilder.Entity<User>().ToTable("Users");
        modelBuilder.Entity<Role>().ToTable("Roles");
        modelBuilder.Entity<RoleUser>().ToTable("RoleUser");
    }
}

そしてモデル:

public class User
{
    public virtual ICollection<Role> Roles { get; set; }

    public int UserId { get; set; }
    public string UserName { get; set; }
    public string Password { get; set; }
    public string PasswordSalt { get; set; }
}

public class Role
{
    public virtual ICollection<User> Users { get; set; }

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

public class RoleUser
{
    [Key, ForeignKey("Role"), Column(Order = 0)]
    public int RoleId { get; set; }
    [Key, ForeignKey("User"), Column(Order = 1)]
    public int UserId { get; set; }

    public virtual Role Role { get; set; }
    public virtual User User { get; set; }
}

問題の例:

    var dbContext = new MembershipDbContext();

    var users = dbContext.Users.ToList();
    var roles = dbContext.Roles.ToList();

    //it says: "ERROR: 42P01: relation "dbo.RoleUser1" not exist"
    var rolesOfFirstUser = users[0].Roles;//not working 
    var usersOfFirstRole = roles[0].Users;//not working

    var roleUsers = dbContext.RoleUsers.ToList();//all links works perfect

機能させるにはどうすればよいですか? この答えはそれを修正しますが、EFが「RoleUsers」リンクテーブルを作成する場所がわかりません。それが必要。

ps 下手な英語でごめんなさい。

4

1 に答える 1

1

実際には、(両方のファイルで) これらのコレクションが RoleUser を指すようにする必要があります。つまり、次のようになります。

public virtual ICollection<RoleUser> RoleUsers {get;set;}

于 2013-02-18T21:34:58.380 に答える