1

私はOracleデータベースでデータベースファーストのアプローチを使用しています。データベースには、USERS、ROLES、およびそれらの間の結合テーブルの 3 つのテーブルがあります: USERS_ROLES_ASSOCIATION。私のモデルは2つのクラスで構成されています:

[Table("USERS", Schema = "SIGNUM")]
public class User
{
    public User()
    {
        Roles = new HashSet<Role>();
    }

    [Key]
    [DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)]
    [Column("USR_ID")]
    public decimal UserId { get; set; }

    [Column("USR_LOGIN")]
    public string Login { get; set; }

    [Column("USR_PASS")]
    public string Password { get; set; }

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

[Table("ROLES", Schema = "SIGNUM")]
public class Role
{
    public Role()
    {
        Users = new HashSet<User>();
    }

    [Key]
    [DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)]
    [Column("ROL_ID")]
    public decimal RoleId { get; set; }

    [Column("ROL_NAME")]
    public string RoleName { get; set; }

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

ユーザーの役割を解決しようとすると:

using (var dbContext = new AppDbContext())
{
    User user = dbContext.Users.FirstOrDefault(u => string.Equals(u.Login, "someusername"));
    var roles = user.Roles.Select(r => r.RoleName); // exception
}

...次のエラーが表示されます:「ORA-00942: テーブルまたはビューが存在しません」。

問題は、EF が "SIGNUM"."USERS_ROLES_ASSOCIATION" ではなく "dbo"."RoleUsers" テーブルを探していることです。データベース優先アプローチで多対多関係の結合テーブル名とスキーマ名を指定するにはどうすればよいですか?

4

1 に答える 1

4

データベース優先アプローチで多対多関係の結合テーブル名とスキーマ名を指定するにはどうすればよいですか?

流暢な設定コードから手動で指定する必要があります...

modelBuilder.Entity<User>()
    .HasMany(x => x.Roles)
    .WithMany(x => x.Users)
    .Map(x => x.ToTable("UserRole", "SIGNUM"));
于 2013-04-20T14:46:46.823 に答える