首先使用代码ASP MVC

时间:2017-04-29 09:07:37

标签: c# sql sql-server asp.net-mvc ef-migrations

我有两个课程ABBA的外键。

class A {
     byte Id{get; set;}
     string Name{get;set;}
 }

class B {
     byte Id{get; set;}
     string Name{get;set;}
     A A{get;set;}
     byte AId{get;set;}
 }

我的问题是:

  1. 我创建了一个类A,其属性id的类型为int
  2. 我运行update-database
  3. 我将id的数据类型修改为byte
  4. 我再次运行update-database
  5. 我发现在表B中使用id A作为外键有两列,即aIda_Id
  6. 我的问题是:如何使用代码优先方法删除列a_Id?或者无论如何这是可行的。

    我尝试运行查询:ALTER TABLE DROP COLUMN a_Id - 失败,因为一个或多个对象访问此列。

    我还尝试使用VS Server资源管理器直接删除列,使用表定义删除列。但它也没有用。

    由于

4 个答案:

答案 0 :(得分:0)

只需按照以下步骤操作即可
1:从模型中删除属性 2:在包管理控制台中运行“启用 - 迁移” 3:下次运行“添加 - 迁移”MigrationsName“'。如果有任何情况,它显示'项目测试项目未能建立,然后再次建立项目 4:现在运行'Update-Database'

答案 1 :(得分:0)

也许您忘记在模型中更改B的FK类型。

[Required]
public byte ClassAId{ get; set; }

public virtual ClassA ClassA{ get; set; }

同时查看迁移的Up and Down方法中的内容。

关于classA的Id的属性[Key]也很有用。

答案 2 :(得分:0)

你可以评论B类和更新数据库! (删除表) 再次使用B类更新数据库! :)对我来说这项工作!

答案 3 :(得分:0)

我在学习ASP.net时遇到了同样的问题 删除不需要的道具的解决方案如下:

1-您必须将其删除为索引 因此,请添加新的迁移并将其写在UP方法中

    DropIndex("dbo.TableName", new[] { "ColumnName" });

2-更新数据库 注意:在此阶段,如果打开表的定义(SQL代码),可以确保索引不存在

3-新迁移,但现在使用Up方法编写

 DropColumn("TableName", "ColumnName");

4-更新数据库

它消失了