首先是Ids实体框架代码的最佳实践

时间:2016-06-20 23:05:37

标签: entity-framework ef-code-first

所以我今天早些时候偶然发现了这篇文章     https://blogs.msdn.microsoft.com/azuremobile/2014/05/22/tables-with-integer-keys-and-the-net-backend/

在文章中,作者发表评论引起了我的注意。他说

注意:通常,从.NET后端的实体框架代码优先模型开始时,您将使用字符串ID

从我读过的内容来看,使用字符串ID会随着表的增长而出现性能问题。所以我想知道这只是作者的意见还是标准。如果是后者,我想知道其背后的原因。

2 个答案:

答案 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; }
....