entity-framework - 创建替代键后如何更新其数据类型?
问题描述
我想更改标记为备用键的列的数据类型。
我更改了代码中的数据类型并创建了新的迁移脚本,但脚本抛出错误。
public class Person
{
[Key]
public int PersonId { get; set; }
public int Email { get; set; }
}
public class TestEntities:DbContext
{
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
optionsBuilder.UseSqlServer("Data Source=(LocalDb)\\MSSQLLocalDB;Initial Catalog=ff;Integrated Security=SSPI;");
base.OnConfiguring(optionsBuilder);
}
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Entity<Person>().HasAlternateKey(a => a.Email);
base.OnModelCreating(modelBuilder);
}
public DbSet<Person> Person { get; set; }
}
这里的电子邮件(在开发过程中错误编码的代码中的 int 数据类型)需要是唯一的。所以我使用了fluent api来制作独特的。然后我创建了初始迁移脚本并运行了该脚本表是使用电子邮件作为唯一键约束创建的表因为此时没有任何行。现在我将电子邮件的数据类型更正为字符串。然后我创建了第二个迁移脚本,当我尝试运行时出现以下错误
对象“AK_Person_Email”依赖于“Email”列。ALTER TABLE ALTER COLUMN 电子邮件失败,因为一个或多个对象访问此列。
你如何更新数据类型。
解决方案
您不能更改包含在备用键(或主键、外键或索引)中的列的数据类型。要实现您的目标,请删除备用键,更改列的数据类型并再次创建备用键。
推荐阅读
- nginx - 当响应从 memcached 上游发送时,为什么 nginx $upstream_response_time 为零
- ios - 将选择器传递给扩展
- java - getContentResolver() 不返回 mp3?
- symfony - symfony4:控制台命令中的mysql
- javascript - 如何使 v-flex 响应式
- latex - 如何在乳胶中将列表分解为页面?
- java - java流映射对象数据成员到int列表
- c# - 在新的 dev.azure.com / TFS 系统中为 UWP 设置构建
- css - 即使描述发生变化,如何设置框的高度保持不变?(CSS)
- python - TypeError:“str”对象在 API 中传递变量时不可调用