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

时间:2013-05-10 09:43:17

标签: 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; }
}

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

但数据库上的结果总是:

  • [LabConfig]。[T_ADGroups]
  • [LabConfig]。[T_ApplicationRoles]
  • [ DBO ]。[ApplicationRoleADGroups]

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

1 个答案:

答案 0 :(得分: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"));

    }
}

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

始终仔细检查映射!

相关问题