所以我今天早些时候偶然发现了这篇文章 https://blogs.msdn.microsoft.com/azuremobile/2014/05/22/tables-with-integer-keys-and-the-net-backend/
在文章中,作者发表评论引起了我的注意。他说
注意:通常,从.NET后端的实体框架代码优先模型开始时,您将使用字符串ID
从我读过的内容来看,使用字符串ID会随着表的增长而出现性能问题。所以我想知道这只是作者的意见还是标准。如果是后者,我想知道其背后的原因。
答案 0 :(得分:1)
IMHO身份字段应该是数字,因为性能原因匹配int比匹配字符串快得多,数字字段比字符串节省了大量空间。
答案 1 :(得分:1)
技术上是的,您可以使用字符串作为主键,但如果字符串有意义成为主键,那么您应该使用它。您必须考虑一下您的帐户。
Digtis比较比字符串比较更快
更长的字符串意味着难以比较
当您必须使用字符串作为主键时,请设置长度,例如MaxLength = 20 = nvarchar(20)
public class User
{
[Key, DatabaseGenerated(DatabaseGeneratedOption.None), MaxLength(20)]
public string UserId { get; set; }
....
这有助于您避免一些性能问题。 您还可以使用dbcontext.executesql命令将生成的密钥从nvarchar更改为varchar,这将为您提供更多空间(一个字符只使用一个字节,而不是2个字节)。
或者,您可以使用代码首先更改列数据类型,如下所示:
[Key, DatabaseGenerated(DatabaseGeneratedOption.None), Column(TypeName = "varchar"), MaxLength(20)]
public string UserId { get; set; }
....