我有两个课程A
和B
。 B
有A
的外键。
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;}
}
我的问题是:
A
,其属性id
的类型为int
update-database
id
的数据类型修改为byte
update-database
B
中使用id
A
作为外键有两列,即aId
和a_Id
。 我的问题是:如何使用代码优先方法删除列a_Id
?或者无论如何这是可行的。
我尝试运行查询:ALTER TABLE DROP COLUMN a_Id
- 失败,因为一个或多个对象访问此列。
我还尝试使用VS Server资源管理器直接删除列,使用表定义删除列。但它也没有用。
由于
答案 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-更新数据库
它消失了