相关表上的不同模式名称 - 实体框架

Dan*_*iel 3 entity-framework ef-code-first

是否可以在相关表格上使用与[dbo]不同的模式名称?

我先使用代码.

例:

ApplicationRole.cs

public class ApplicationRole
{
    public Guid ApplicationRoleId { get; set; }
    public string Name { get; set; }
    public virtual ICollection<ADGroup> ADGroups { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

ADGroup.cs

public class ADGroup
{
    public Guid ADGroupId { get; set; }
    public string Name { get; set; }
    public virtual ICollection<ApplicationRole> ApplicationRoles { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

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);


    }
}
Run Code Online (Sandbox Code Playgroud)

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");
            });
    }
}
Run Code Online (Sandbox Code Playgroud)

但是数据库的结果总是如下:

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

有任何想法吗?我花了好几个小时才能使用我想要的架构而没有任何成功.

Dan*_*iel 5

在我的情况下,我做了一些愚蠢的事情,我没有看到......

将原始ADGroupConfiguration.cs与此进行比较:

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"));

    }
}
Run Code Online (Sandbox Code Playgroud)

因此我的映射有一个错误,它隐藏了我正在寻找的真正问题...

总是仔细检查映射!