实体框架无效的列名

Posted

技术标签:

【中文标题】实体框架无效的列名【英文标题】:entity framework invalid column name 【发布时间】:2013-01-31 20:55:03 【问题描述】:

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

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

"无效的列名 'Bo_obrano'。\r\n无效的列名 'Bo_boano'。\r\n无效的列名 'Bo_ndos'。"

"Invalid column name 'Bi_bistamp'

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

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);
    

和这样的双向映射:

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 类中的任何值。对数据库中的任何列都要少得多。 那么我该如何解决呢? 帮助将不胜感激 提前致谢

【问题讨论】:

【参考方案1】:

我通过删除导航属性让它工作。因为表格之间没有任何关联。到目前为止,他们俩都被隔离了。再次感谢您的帮助

【讨论】:

【参考方案2】:

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

protected override void OnModelCreating( DbModelBuilder modelBuilder )

    modelBuilder.Entity<Bi>( ).ToTable( "dbo.Bi" );
    modelBuilder.Entity<Bi>( ).Property( p => p.bistamp).HasColumnName("actualName" ); 

【讨论】:

抱歉回复晚了,但例如在我的 bimap 类上没有以下几行: ToTable("bi"); Property(t => t.bistamp).HasColumnName("bistamp");处理注入和数据库映射?

以上是关于实体框架无效的列名的主要内容,如果未能解决你的问题,请参考以下文章

实体框架核心:无效的列名“UserId1”

在实体框架.net核心中获取无效的列名“CompanyLocationId”

实体框架创建列名比预期长的数据库

实体框架代码优先自加入,'多重性在角色中无效'

实体框架 - 无效的列名称'* _ID“

android开发三大框架