实体框架无效的列名

时间:2013-01-31 20:55:03

标签: c# entity-framework entity

我在实体框架方面遇到了一些问题。 其中一个在这里得到解决entity framework multiple tables same name

现在当我尝试插入表bo或表bi时,我得到以下错误:

  

{“无效的列名'Bo_obrano'。\ r \ n无效的列名   'Bo_boano'。\ r \ n无效的列名称'Bo_ndos'。“}

{"Invalid column name 'Bi_bistamp'}

当我通过使用电动工具对数据库进行逆向工程时,我现在可以像这样使用我的映射:

public boMap()
    {
    // Primary Key
    HasKey(t => new { t.obrano, t.boano, t.ndos });

     Property(t => t.obrano)
         .HasDatabaseGeneratedOption(DatabaseGeneratedOption.None);
     Property(t => t.boano)
         .HasDatabaseGeneratedOption(DatabaseGeneratedOption.None);
     Property(t => t.ndos)
         .HasDatabaseGeneratedOption(DatabaseGeneratedOption.None);
    }
像这样的

和bi映射:

public BiMap()
        {
            // Primary Key
            HasKey(t => t.bistamp);
....

我的上下文类看起来像这样:

public class PHCDbContext:DbContext
    {
        //classes mapeadas via reverse
        public DbSet<Bi> DadosLinhasEncomendas { get; set; }
        public DbSet<Bo> DadosCabecalhosEncomendas { get; set; }
...

     public PHCDbContext(string connection):base(connection)
            {

                Database.SetInitializer<PHCDbContext>(null);
            }

            protected override void OnModelCreating(DbModelBuilder modelBuilder)
            {
                modelBuilder.Configurations.Add(new BiMap());
                modelBuilder.Configurations.Add(new boMap());
    ....

我按照此处的说明导出了映射: export code first model mapping

我发现这些字段本身并不存在。当我在visual studio中打开edmx文件时,我发现这些字段位于类的导航属性中,位于模型的关联部分。它们代表表中的主键,而不是外键。但它们没有映射到poco类中的任何值。更少到数据库中的任何列。 那怎么能解决这个问题呢? 帮助将是apreciated 提前谢谢

2 个答案:

答案 0 :(得分:1)

我通过删除导航属性让它工作。因为表格之间没有相关性。到目前为止,它们都是孤立的。再次感谢您的帮助

答案 1 :(得分:0)

您的情况看起来有些不寻常,但您需要查看数据库并查看列名称,然后在上下文中将其映射:

protected override void OnModelCreating( DbModelBuilder modelBuilder )
{
    modelBuilder.Entity<Bi>( ).ToTable( "dbo.Bi" );
    modelBuilder.Entity<Bi>( ).Property( p => p.bistamp).HasColumnName("actualName" ); 
}