如何将生成的多对多关系表强制为正确的模式?

时间:2013-05-25 05:53:21

标签: entity-framework ef-code-first

我有表parkpay.Userparkpay.Role。 EF Code First会自动生成第三个表,将第二个表链接为多对多关系,但它会生成dbo.UserRole。如何让它成为表'parkpay.UserRole'?

1 个答案:

答案 0 :(得分:0)

使用EntityTypeConfiguration<>配置多对多映射。

public class User
{
    public long Id { get; set; }
    public string UserName { get; set; }
    public string Password { get; set; }
    public virtual ICollection<Role> Roles { get; set; }
}

public class Role
{
    public long Id { get; set; }
    public string Name { get; set; }
    public virtual ICollection<User> Users { get; set; }
}

public class UserMapping : EntityTypeConfiguration<User>
{
    public UserMapping()
    {
        ToTable("User", "parkpay");
        HasKey(e => e.Id).Property(e => e.Id).HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity);
        HasMany(e => e.Roles).WithMany(e => e.Users).Map(m => m.ToTable("UserRole", "parkpay").MapLeftKey("RoleId").MapRightKey("UserId"));
    }
}

public class RoleMapping : EntityTypeConfiguration<Role>
{
    public RoleMapping()
    {
        ToTable("Role", "parkpay");
        HasKey(e => e.Id).Property(e => e.Id).HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity);
    }
}

public class DatabaseContext : DbContext
{
    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        modelBuilder.Configurations.Add(new UserMapping());
        modelBuilder.Configurations.Add(new RoleMapping());
        base.OnModelCreating(modelBuilder);
    }
}