如何修复'支持上下文的模型自创建数据库以来已发生变化。'在数据库中

时间:2014-09-11 18:05:10

标签: c# asp.net entity-framework

我正在尝试将实体连接到现有数据库,但我很难搞清楚为什么会出现以下错误:

  

支持' RPSContext'自创建数据库以来,上下文已更改。考虑使用Code First Migrations来更新数据库(http://go.microsoft.com/fwlink/?LinkId=238269)。

正如我所提到的,我正在连接现有数据库。所以我不需要实体来修改结构。我希望能够选择/插入/更新/等等。

设计

DB Design

型号:

public class ProductAttributePriceAdjustment
{
        [Key]
        public int AdjustmentId { get; set; }
        public int StoreProductId { get; set; }
        public int StoreId { get; set; }
        public string ProductId { get; set; }
        public int ProductSizeId { get; set; }
        public decimal Adjustment { get; set; }
        public int PointsAdjustment { get; set; }
        public int ProductColorID { get; set; }
}

上下文

public class RPSContext : DbContext
{
        public RPSContext() : base("ApplicationConnection")
        {
        }

        protected override void OnModelCreating(DbModelBuilder modelBuilder)
        {
            modelBuilder.Entity<ProductAttributePriceAdjustment>().ToTable("ProductAttributePriceAdjustment");
        }

        public DbSet<ProductAttributePriceAdjustment> PriceAdjustments { get; set; }
}

2 个答案:

答案 0 :(得分:1)

几乎每次我看到这个错误都是因为数据库架构和代码所期望的架构没有同步。在某些时候,架构已更改,并且您没有在代码中反映您的更改。

例如,您有一个数据库列Adjustment,这是一种允许空值的货币类型。但是,在c#类中,它的类型为decimal,它不接受空值。还有一些其他属性要么不存在,要么类型不匹配。

好消息是,如果您使用数据库优先,修复它应该非常简单。这很简单,只需转到.edmx文件,右键单击空白区域,然后选择&#34;从数据库更新模型&#34;。

enter image description here

您可以在此处添加,更新或删除数据库中的项目。保存模型文件后,VS将重新创建模型类,并且应该同步它。

请注意:如果重命名db列,VS将不会从模型中删除旧列名,并且会在您手动从代码模型中删除列之前抛出错误。

答案 1 :(得分:1)

转到软件包管理器控制台 然后从迁移文件夹检查迁移历史记录,并检查是否首次启用迁移名称

然后

添加迁移[首次启用迁移名称] -force

然后更新迁移

问题已解决