gpt4 book ai didi

c# - Entity Framework 更改主键类型

转载 作者:太空狗 更新时间:2023-10-29 23:38:28 25 4
gpt4 key购买 nike

我使用的是 EF 6.0 Code First,我有这个实体:

 public class TrainingRespect
{
[Key]
public int RespectId { get; set; }

public DateTime? DateWhenRespected { get; set; }

#region

public string UserId { get; set; }
public User User { get; set; }

public Guid TrainingId { get; set; }
public Trening Training { get; set; }

#endregion
}

我想将它的主键 (RespectId) 从 int 更改为 GUID/string/long。

最简单的方法是什么?我可以只更改类型并且 EF 迁移将处理所有事情还是应该以其他方式完成?

最佳答案

好的,可以实际回答您的问题。 是的您可以只更改数据类型,迁移应该会处理它。

但是根据您的评论,您在应用此迁移时遇到了问题。这并没有否定上述内容,但我会尝试使用一些猜测来提供帮助。

如果您使用的是 Sql Azure,则所有表都必须有聚集索引。 EF6 甚至应该在字符串键上创建聚簇索引。 alpha 3 存在一个错误,但它不会在迁移表上创建聚集键。

http://entityframework.codeplex.com/discussions/435723

有关说明和解决方法,请参阅上面的链接。

如果您仍然遇到问题,可以从软件包控制台运行以下命令:

Update-Database -Script

这将生成一个 SQL 脚本,而不是尝试直接更新。您可以看看这个,看看是否有任何 Create Table 语句没有聚集索引。

如果由于某种原因没有。您可以显式修改迁移的 CreateTable 语句以使主键聚集。

CreateTable("MyTable", 
c => new {
Id = c.String(nullable: false, maxLength: 128)
})
.PrimaryKey(t => t.Id, null, true);

还值得注意:Guids 会产生糟糕的聚集索引。如果您使用的是 GUID 键并且可以选择,请不要在它们上聚集,而是使用第二个聚集索引。

关于c# - Entity Framework 更改主键类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28108119/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com