Chr*_*ini 6 ef-code-first ef-migrations
我正在使用EF 4.3.1 Code First Migrations.我有一张桌子:
public class Product
{
[Key]
[Column(Order=0)]
[MaxLength(100)]
public string Store { get; set; }
[Key]
[Column(Order=1)]
[MaxLength(100)]
public string Sku { get; set; }
}?
Run Code Online (Sandbox Code Playgroud)
我有一个使用上面的代码创建的现有表.然后我将其移动到单列主键:
public class Product
{
[MaxLength(100)]
public string Store { get; set; }
[Key]
[MaxLength(100)]
public string Sku { get; set; }
}?
Run Code Online (Sandbox Code Playgroud)
这导致EF在下一次自动迁移中失败,抱怨:
ALTER TABLE [产品] ALTER COLUMN [Store] nvarchar
对象'PK_Product'依赖于列'Store'.ALTER TABLE ALTER COLUMN存储失败,因为一个或多个对象访问此列.
显然,在尝试触发此ALTER语句之前需要删除PK_Product(为什么它根本不改变列?),而是迁移失败.
我做错了什么或这是一个错误?解决方法?
Die*_*hon 13
您无法通过自动迁移执行此操作.您必须使用Add-Migration然后更改它来创建迁移,以便它只修改PK.
迁移可以很简单:
public partial class TheMigration : DbMigration
{
public override void Up()
{
DropPrimaryKey("Products", new[] { "Store", "Sku" });
AddPrimaryKey("Products", "Sku");
}
public override void Down()
{
DropPrimaryKey("Products", new[] { "Sku" });
AddPrimaryKey("Products", new[] { "Store", "Sku" });
}
}
Run Code Online (Sandbox Code Playgroud)
EF正在改变列,因为当它是a的一部分时Key,它是隐含的NOT NULL.您可以保留原样,添加[Required]属性,或允许EF 在删除PK 后更改列.
| 归档时间: |
|
| 查看次数: |
3996 次 |
| 最近记录: |