2012-10-22 58 views
1

這裏是我的模型:實體框架 - 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:在MetadataWorkspace中不存在指定爲此MSL一部分的列'Id'。

如果我在EntityConfiguration的構造函數中註釋掉「.HasColumnName」調用,遷移將正確生成(當然除了列名是Id而不是Key)。

TPC映射是否應該支持不使用默認列名的主鍵列?

回答

1

問題似乎是Entity Framework不希望我映射審計。如果我刪除AuditConfiguration,則按預期工作。