我有一个带有主键Relations
的实体RelId
。我想将此密钥更改为RelationId
首先,我更改了SSMS中的Columname: SQL Table
然后我在所有参考文献中使用(在Visual Studio中)重命名将单词RelId
更改为RelationId
。
我认为数据库和代码中的更改会说服我的代码使用新命名的主键,但是当我运行项目时会出现以下错误:
每个表中的列名必须是唯一的。列名称' RelationId'在表格中,dbo。'被指定不止一次。
当然,情况并非如此。在表中,列RelationId
仅存在一次。就像EF5试图添加另一个具有相同名称的列一样。
任何人都可以解释为什么会出现此错误以及如何解决此问题?
Global.asax中
protected void Application_Start()
{
//Database.SetInitializer<OefenfirmaContext>(new OefenfirmaDropCreateAndSeed());
Database.SetInitializer<OefenfirmaContext>(new OefenfirmaDropCreateAndSeed());
ViewEngines.Engines.Clear();
ViewEngines.Engines.Add(new RazorViewEngine());
AreaRegistration.RegisterAllAreas();
RouteConfig.RegisterRoutes(RouteTable.Routes);
ModelBinders.Binders.Add(typeof(ShoppingCart), new CartModelBinder());
}
和OefenfirmaDropCreateAndSeed类(不再播种):
public class OefenfirmaDropCreateAndSeed :
MigrateDatabaseToLatestVersion<OefenfirmaContext, Migrations.Configuration>
{
}
答案 0 :(得分:0)
您正在使用添加迁移吗?那么,您不需要使用手动脚本手动更新数据库端。您应该仅在Add-Migration脚本中执行此操作。如果手动运行数据库端重命名列的脚本,则现有系统生成的MigrationScripts和数据库将不同步。因此,在运行/回滚新/旧迁移脚本时,最终会出错。根据我的理解,请尝试以下步骤
步骤1:在Visual Studio代码中重命名模型类的主键( RelId to RelationId)。
第2步:在程序包管理器控制台中运行添加 - 迁移RenameMyColumn 。系统将根据模型更改生成Migrationscripts下方。
注意:请在生成的系统中验证系统生成的 AddColumn 和 DropColumn ,而不是 RenameColumn 脚本,如下所示迁移脚本。如果是,请手动删除AddColumn和DropColumn脚本,并在向上()和向下()方法中添加 RenameColumn()脚本重命名的主键属性。
namespace MyProject.Model.Migrations
{
using System;
using System.Data.Entity.Migrations;
public partial class RenameMyColumn : DbMigration
{
public override void Up()
{
// Remove the following auto-generated lines(Note:These scripts generated for an example purpose not for primary key)
AddColumn("dbo.MyTable", "NewColumn", c => c.String(nullable: false, maxLength: 50));
DropColumn("dbo.MyTable", "OldColumn");
// Add this line
RenameColumn("dbo.MyTable", "OldColumn", "NewColumn");
}
public override void Down()
{
// Remove the following auto-generated lines(Note:These scripts generated for an example purpose not for primary key)
AddColumn("dbo.MyTable", "OldColumn", c => c.String(nullable: false, maxLength: 50));
DropColumn("dbo.MyTable", "NewColumn");
// Add this line
RenameColumn("dbo.MyTable", "NewColumn", "OldColumn");
}
}
}
希望这可以帮助你前进!