3

相关表上的模式名称是否可能与 [dbo] 不同?

我首先使用代码。

例子:

应用程序角色.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; }
}

应用程序角色配置.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");
            });
    }
}

但是数据库上的结果总是:

  • [实验室配置].[T_ADGroups]
  • [实验室配置].[T_ApplicationRoles]
  • [ dbo ].[ApplicationRoleADGroups]

有任何想法吗?我花了几个小时来使用我想要的架构,但没有成功。

4

1 回答 1

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

    }
}

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

始终仔细检查映射!

于 2013-05-10T12:39:37.027 回答