Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Different schema name on correlation table - Entity Framework

Is it possible to have a different schema name on correlation tabels than [dbo]?

I'm using code first.

Example:

ApplicationRole.cs

public class ApplicationRole
{
    public Guid ApplicationRoleId { get; set; }
    public string Name { get; set; }
    public virtual ICollection<ADGroup> ADGroups { get; set; }
}

ADGroup.cs

public class ADGroup
{
    public Guid ADGroupId { get; set; }
    public string Name { get; set; }
    public virtual ICollection<ApplicationRole> ApplicationRoles { get; set; }
}

ApplicationRoleConfiguration.cs

public class ApplicationRoleConfiguration : EntityTypeConfiguration<ApplicationRole>
{
    public ApplicationRoleConfiguration()
    {
        ToTable("T_ApplicationRoles", "LabConfig");

        this.HasKey(a => a.ApplicationRoleId);

        this.Property(t => t.ApplicationRoleId)
            .HasColumnName("ApplicationRole_GUID")
            .HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity);


    }
}

ADGroupConfiguration.cs

public class ADGroupConfiguration : EntityTypeConfiguration<ADGroup>
{
    public ADGroupConfiguration()
    {
        ToTable("T_ADGroups", "LabConfig");

        this.HasKey(a => a.ADGroupId);

        this.Property(t => t.ADGroupId)
            .HasColumnName("ADGroup_GUID")
            .HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity);

        // correlation table should also get schema [LabConfig]
        this.HasMany(o => o.ApplicationRoles)
            .WithMany(r => r.ADGroups)
            .Map(m =>
            {
                m.MapLeftKey("ADGroup_GUID");
                m.MapRightKey("ApplicationRole_GUID");
                ToTable("T_ApplicationRoleADGroups", "LabConfig");
            });
    }
}

But the result on the database is always:

  • [LabConfig].[T_ADGroups]
  • [LabConfig].[T_ApplicationRoles]
  • [dbo].[ApplicationRoleADGroups]

Any ideas? I spent hours for this to work with my desired schema without any success.

like image 765
Daniel Avatar asked Jul 09 '26 17:07

Daniel


1 Answers

In my case i did something stupid i didn't see...

Compare the original ADGroupConfiguration.cs with this:

public class ADGroupConfiguration : EntityTypeConfiguration<ADGroup>
{
    public ADGroupConfiguration()
    {
        ToTable("T_ADGroups", "LabConfig");

        this.HasKey(a => a.ADGroupId);

        this.Property(a => a.ADGroupId)
            .HasColumnName("ADGroup_GUID")
            .HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity);

        this.Property(t => t.Name).HasColumnName("Name").IsRequired();

        // the Mapping was causing the error.
        // this Mapping is correct now
        this.HasMany(o => o.ApplicationRoles)
            .WithMany(r => r.ADGroups)
            .Map(m => m.MapLeftKey("ADGroup_GUID")
                            .MapRightKey("ApplicationRole_GUID")
                            .ToTable("T_ApplicationRoleADGroups", "LabConfig"));

    }
}

Hence my mapping had an error it was hiding the real problem i was searching for...

Always double check the mappings!

like image 87
Daniel Avatar answered Jul 11 '26 07:07

Daniel



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!