实体框架-TPC-覆盖主键列名称



这是我的模型:

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>
{}

当我尝试为此模型生成迁移时,我会收到以下错误:

错误2010:指定为此MSL的一部分的列'ID'不存在于元瓦克斯广场中。

如果我在EntityConfiguration的构造函数中评论" .hascolumnname",则迁移会正确生成(当然,除了列名是ID而不是键)。

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

问题似乎是实体框架不希望我映射审核。如果我删除了审计配置,则可以按预期进行工作。

最新更新