MVC4实体框架多到许多自定义连接表的名称和架构名称 [英] MVC4 Entity Framework many-to-many custom join table name and schema name

查看:199
本文介绍了MVC4实体框架多到许多自定义连接表的名称和架构名称的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我使用的是Oracle数据库的数据库第一的方针。在数据库中,我有3个表:用户,角色,并加入他们之间表:USERS_ROLES_ASSOCIATION。我的模型由两个类组成:

  [表(用户模式=西格纳)]
公共类用户
{
    公共用户()
    {
        角色=新的HashSet<的角色和GT;();
    }    [键]
    [DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)
    [专栏(USR_ID)]
    公共十进制用户ID {搞定;组; }    [专栏(USR_LOGIN)]
    公共字符串登录{搞定;组; }    [专栏(USR_PASS)]
    公共字符串密码{搞定;组; }    公共虚拟的ICollection<的角色和GT;角色{搞定;组; }
}[表(角色,架构=西格纳)]
公共类角色
{
    公共角色()
    {
        用户=新的HashSet<使用者>();
    }    [键]
    [DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)
    [专栏(ROL_ID)]
    公共小数角色ID {搞定;组; }    [专栏(ROL_NAME)]
    公共字符串角色名{获得;组; }    公共虚拟的ICollection<使用者>用户{搞定;组; }
}

当我尝试解决用户的角色:

 使用(VAR的DbContext =新AppDbContext())
{
    用户的用户= dbContext.Users.FirstOrDefault(U => string.Equals(u.Loginsomeusername));
    变种角色= user.Roles.Select(R => r.RoleName); //例外
}

...我收到以下错误:ORA-00942:表或视图不存在

的问题是,EF是寻找表DBO,而不是西格纳。USERS_ROLES_ASSOCIATIONRoleUsers。
我怎么可以指定连接表的名称多到很多数据库第一种方法的关系和架构名称?


解决方案

  

我怎么可以指定为许多一对多的关系,并加入表名
  在数据库第一的方针架构名称?


您不得不从流畅的配置code手工指定它...

  modelBuilder.Entity<使用者>()
    .HasMany(X => x.Roles)
    .WithMany(X => x.Users)
    .MAP(X => x.ToTable(的UserRole,西格纳));

I'm using database-first approach with Oracle database. In database I have 3 tables: USERS, ROLES, and join table between them: USERS_ROLES_ASSOCIATION. My model consists of two classes:

[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; }
}

When I try to resolve user's roles:

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
}

... I get the following error: "ORA-00942: table or view does not exist".

The problem is that EF is looking for table "dbo"."RoleUsers" instead of "SIGNUM"."USERS_ROLES_ASSOCIATION". How can I specify join table name for many-to-many relationship and schema name in database-first approach?

解决方案

How can I specify join table name for many-to-many relationship and schema name in database-first approach?

You'd have to specify it manually from the fluent config code...

modelBuilder.Entity<User>()
    .HasMany(x => x.Roles)
    .WithMany(x => x.Users)
    .Map(x => x.ToTable("UserRole", "SIGNUM"));

这篇关于MVC4实体框架多到许多自定义连接表的名称和架构名称的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆