C# 实体框架:每个表中的迁移列名必须是唯一的
现在我的源代码有问题了。我不知道原因。我正在使用EntityFramework.6.1.3 现在,我有一个模型文件夹,在这个文件夹中我有Product.cs。这是Product.cs文件的内容。 ` 我有一个表产品是出口。 我仍然没有文件迁移来将新的ProductUnitPrice添加到Products表中 当我运行我的项目时,它会自动将新的ProductUnitPrice列插入到产品的表中 但是,我想创建一个文件迁移,将新的ProductUnitPrice添加到Products表中。 下面是文件迁移 ` ` 但是当我运行我的应用程序时,我会收到一条错误消息 每个表中的列名必须是唯一的。表“dbo.Products”中的列名“ProductUnitPrice”被多次指定。描述:执行当前web请求期间发生未处理的异常。请查看堆栈跟踪以了解有关错误的更多信息以及错误在代码中的起源。异常详细信息:System.Data.SqlClient.SqlException:每个表中的列名必须唯一。表“dbo.Products”中的列名“ProductUnitPrice”被多次指定 为了解决上述问题,我在模型文件中添加了[NotMapped] 我可以运行应用程序,ProductUnitPrice插入数据库。但是,我的问题是我可以将数据更新到ProductUnitPrice列。如果删除迁移文件和[NotMapped],则可以将数据更新到ProductUnitPrice列 问题是什么 我希望有一个迁移文件来添加ProductUnitPrice列,并且我希望我可以将数据更新到此列C# 实体框架:每个表中的迁移列名必须是唯一的,c#,sql-server,entity-framework,migration,C#,Sql Server,Entity Framework,Migration,现在我的源代码有问题了。我不知道原因。我正在使用EntityFramework.6.1.3 现在,我有一个模型文件夹,在这个文件夹中我有Product.cs。这是Product.cs文件的内容。 ` 我有一个表产品是出口。 我仍然没有文件迁移来将新的ProductUnitPrice添加到Products表中 当我运行我的项目时,它会自动将新的ProductUnitPrice列插入到产品的表中 但是,我想创建一个文件迁移,将新的ProductUnitPrice添加到Products表中。 下面是文
请帮我解决它。这意味着您的表中已经有此列 我想到的是,您在迁移的配置文件中设置了如下内容:
AutomaticMigrationsEnabled = true;
这意味着每次更改模型中的某些内容时,迁移都会自动更新
如果是,请尝试将AutomaticMigrationsEnabled设置为false、删除迁移、运行project、,然后再次尝试添加迁移。我尝试添加迁移,但收到一条错误消息System.Data.Entity.Migrations.Infrastructure.AutomaticMigrationsDisabledException:无法更新数据库以匹配当前模型,因为存在挂起的更改且自动迁移已禁用。将挂起的模型更改写入基于代码的迁移或启用自动迁移。将DbMigrationsConfiguration.AutomaticMiggrationsEnabled设置为true以启用自动迁移。我仍然收到此消息每个表中的列名必须唯一。表“dbo.Products”中的列名“ProductUnitPrice”被多次指定。描述:执行当前web请求期间发生未处理的异常。请查看堆栈跟踪以了解有关错误的更多信息以及错误在代码中的起源。异常详细信息:System.Data.SqlClient.SqlException:每个表中的列名必须唯一。表“dbo.Products”中的列名“ProductUnitPrice”被多次指定。出现这种情况的原因可能只有3种:1。您手动添加了该列,因此EF认为迁移仍处于挂起状态,2。您有另一个属性映射到相同的列名或3。迁移历史记录表被重写。选择你的毒药。同意@DevilSuichiro,也许最好的方法是创建新数据库并运行命令更新数据库确保你没有在模型类中声明两次ProductUnitPrice你不应该为ProductUnitPrice添加[NotMapping],我想你忘了更新数据库。在运行应用程序之前,应该在PackageManager控制台窗口中输入updatedatabase命令。
public partial class AddColumnToProducts : DbMigration
{
public override void Up()
{
AddColumn("dbo.Products", "ProductUnitPrice", c => c.Decimal(nullable: false, precision: 18, scale: 2, storeType: "numeric"));
}
public override void Down()
{
DropColumn("dbo.Products", "ProductUnitPrice");
}
}
[Data]
[Column(TypeName = "numeric"), Display(Name = "ProductUnitPrice")]
[NotMapped]
public decimal ProductUnitPrice { get; set; }
AutomaticMigrationsEnabled = true;