实体框架:列名无效

时间:2015-08-26 15:06:04

标签: c# entity-framework

我从实体框架中得到这个奇怪的错误,我无法弄清楚我做错了什么..

我的数据库上下文代码。

  public DbSet<Interaction> Interactions { get; set; }

        public DbSet<User> Users { get; set; }

        protected override void OnModelCreating(DbModelBuilder modelBuilder)
        {
            InteractionsDBContextConfig(modelBuilder);

            base.OnModelCreating(modelBuilder);
        }

        public static void InteractionsDBContextConfig(DbModelBuilder modelBuilder)
        {
            modelBuilder.Conventions.Remove<PluralizingTableNameConvention>();
            // Interaction entity configuration.
            modelBuilder.Entity<Interaction>()
                .HasKey<int>(key => key.InteractionId);


            modelBuilder.Entity<Interaction>()
                .HasRequired<Form>(x => x.Form)
                .WithMany()
                .HasForeignKey(y => y.FormId);


            modelBuilder.Entity<Interaction>()
               .HasRequired<User>(x => x.User)
               .WithMany()
               .HasForeignKey(y => y.InteractionUserId);


            // User entity configuration.

            modelBuilder.Entity<User>()
                .HasKey<int>(x => x.UserId);

            modelBuilder.Entity<User>()
                .Property(x => x.UserName)
                .IsRequired()
                .HasColumnAnnotation(
                    IndexAnnotation.AnnotationName,
                    new IndexAnnotation(
                        new System.ComponentModel.DataAnnotations.Schema.IndexAttribute() { IsUnique = true }
                        )
                );
        }

我的实体

public class Interaction
    {
        public int InteractionId { get; set; }
        public int FormId { get; set; }
        public string InteractionName { get; set; }
        public virtual Form Form { get; set; }
        public int InteractionUserId { get; set; }

        public virtual User User { get; set; }
        public DateTime Deadline { get; set; }
        public int InteractionType { get; set; }
    }

当我执行以下操作时

var db = dbcontext.Interactions.ToList();

我收到以下错误

  

{&#34;列名无效&#39; InteractionType&#39;。&#34;}

我无法弄清楚错误出现的原因,为什么不能让Entity框架看到我的专栏?更改列的名称似乎没有帮助。

2 个答案:

答案 0 :(得分:3)


可能您更改了Interactions类添加了“InteractionType”属性,但它没有反映在数据库中,您需要使用迁移。

在Visual Studio视图&gt;上打开菜单其他Windows&gt;包管理器控制台,然后在包管理器控制台上写入“启用 - 迁移”并按Enter键
然后将在你的项目中生成一个名为“Migrations”的文件夹,该文件夹包含Configuration类,你需要将AutomaticMigrationsEnabled属性设置为“true”,如下所示。

  public Configuration()
    {
        AutomaticMigrationsEnabled = true;
    }


您回到软件包管理器控制台并编写命令“Update-Database”,您的项目将再次运行。

答案 1 :(得分:0)

我找不到错误显示的原因。

我最后使用此处提到的方法重置了所有迁移:https://stackoverflow.com/a/22451879/2794980

我猜迁移历史记录表和迁移.CS文件存在某种不匹配。

重置一切解决了我的问题。