实体框架无效的列名

本文关键字:无效 框架 实体 | 更新日期: 2023-09-27 17:56:58

我在实体框架方面遇到了更多问题。其中一个在这里解决了 实体框架 多个表同名

现在,当我尝试插入表 BO 或表 BI 时,出现以下错误:

{"无效的列名'Bo_obrano'。''r'无效的列名 "Bo_boano"。''r'列名"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);
    }

和像这样的 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());
    ....

我按照此处的说明导出了映射:导出代码优先模型映射

当我在Visual Studio中打开EDMX文件时,我发现这些字段位于类的导航属性中,位于模型的关联部分中。 它们表示表中的主键,而不是外键。 但它们没有映射到 POCO 类中的任何值。 更不用说数据库中的任何列了。那么我该如何解决这个问题呢?将不胜感激的帮助提前致谢

实体框架无效的列名

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

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

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