Entity framework 实体框架-TPC-重写主键列名

Entity framework 实体框架-TPC-重写主键列名,entity-framework,entity-framework-4,ef-code-first,Entity Framework,Entity Framework 4,Ef Code First,这是我的模型: public abstract class Entity { public long Id { get; set; } } public abstract class Audit : Entity {} public class UserAudit : Audit { public virtual User User { get; set; } } public class User : Entity {} 以下是我的DbContext: public c

这是我的模型:

public abstract class Entity
{
    public long Id { get; set; }
}

public abstract class Audit : Entity
{}

public class UserAudit : Audit
{
    public virtual User User { get; set; }
}

public class User : Entity
{}
以下是我的DbContext:

public class TestDbContext : DbContext
{
    static TestDbContext()
    {
        Database.DefaultConnectionFactory = new SqlCeConnectionFactory("System.Data.SqlServerCe.4.0");
    }

    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        modelBuilder.Configurations.Add(new AuditConfiguration());
        modelBuilder.Configurations.Add(new UserAuditConfiguration());
        modelBuilder.Configurations.Add(new UserConfiguration());
    }
}
下面是我的映射:

public abstract class EntityConfiguration<T> : EntityTypeConfiguration<T>
    where T : Entity
{
    protected EntityConfiguration()
    {
        HasKey(t => t.Id);
        Property(t => t.Id)
            .HasColumnName("Key");
    }
}

public class AuditConfiguration : EntityConfiguration<Audit>
{}

public class UserAuditConfiguration : EntityTypeConfiguration<UserAudit>
{
    public UserAuditConfiguration()
    {
        Map(m =>
            {
                m.MapInheritedProperties();
                m.ToTable("UserAudits");
            });
        HasRequired(u => u.User)
            .WithMany()
            .Map(m => m.MapKey("UserKey"));
    }
}

public class UserConfiguration : EntityConfiguration<User>
{}
公共抽象类EntityConfiguration:EntityTypeConfiguration
其中T:实体
{
受保护的实体配置()
{
HasKey(t=>t.Id);
属性(t=>t.Id)
.HasColumnName(“密钥”);
}
}
公共类审核配置:EntityConfiguration
{}
公共类UserAuditConfiguration:EntityTypeConfiguration
{
公共UserAuditConfiguration()
{
地图(m=>
{
m、 MapInheritedProperties();
m、 ToTable(“用户审计”);
});
HasRequired(u=>u.User)
.有很多
.Map(m=>m.MapKey(“UserKey”);
}
}
公共类用户配置:EntityConfiguration
{}
当我尝试为此模型生成迁移时,出现以下错误:

错误2010:MetadataWorkspace中不存在作为此MSL一部分指定的列“Id”

如果我在EntityConfiguration的构造函数中注释掉“.HasColumnName”调用,迁移将正确生成(当然,列名是Id而不是Key除外)


TPC映射是否应该支持不使用默认列名的主键列?

问题似乎是实体框架不希望我映射审核。如果我删除AuditConfiguration,这将按预期工作。

问题似乎是实体框架不希望我映射Audit。如果我删除AuditConfiguration,这将按预期工作