实体框架代码优先忽略表映射

时间:2012-05-10 11:17:57

标签: entity-framework ef-code-first entity-framework-4.3

我们有一个使用现有遗留数据库的ef项目,但使用ef-migrations向其添加新表。对于这些实体,我们使用新模式创建表,以将它们与旧表分开。我们在db表上使用带有复数形式的类名的约定。 但是,当我们添加一个要映射到旧表的新类(没有多个表名)时,ef似乎忽略了映射。 实体类:

public class Aktor:IVersionedEntityWithId
{
    public int Id { get; set; }
    public string Navn { get; set; }
    public byte[] Version { get; set; }
}

映射代码:

    protected virtual void MapAktor(EntityTypeConfiguration<Tilsyn.Domain.Aktor> config){
        config.ToTable("dbo.Aktor");
        config.Property(v=>v.Version).IsConcurrencyToken().IsRowVersion(); 
        config.HasKey(e=>e.Id); 
    }

例外:

  

System.Data.EntityCommandExecutionException:发生错误   执行命令定义。有关详细信息,请参阅内部异常   ---&GT; System.Data.SqlClient.SqlException:无效的对象名称'dbo.Aktors'。

似乎生成的sql仍然在类名中添加s来获取表名。这张照片中缺少什么?我使用ToTable方法错了吗?

更新:将类名更改为表名以外的其他名称时,它似乎有效。当再次更改名称时,问题就出现了问题。是否存在EF缓存或隐藏映射文件?

1 个答案:

答案 0 :(得分:2)

尝试覆盖DBContext子类中的OnModelCreating()方法以创建映射。

protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
    modelBuilder.Entity<Tilsyn.Domain.Aktor>().ToTable("dbo.Aktor");
}