【问题标题】:MVC Identity 2.2.1 - Primary Key (Guid) as UniqueIdentifier instead of nVarChar(128)MVC Identity 2.2.1 - 主键 (Guid) 作为 UniqueIdentifier 而不是 nVarChar(128)
【发布时间】:2016-08-25 03:18:07
【问题描述】:

当前项目:

  • ASP.NET 4.5.2
  • MVC 5
  • 身份 2.2.1

我遇到的一个问题是,我在整个项目的其余部分都正确使用了 GUID,数据库字段类型为 UniqueIdentifier。不幸的是,Identity 并不遵循相同的规则,并且出于某种难以理解的原因,他们将表字段创建为字符串——nVarChar(128)。

我发现了一些点击显示如何正确修改 Identity 以使用 UniqueIdentifier 并将 Guid 转换为正确格式,但是所有这些资源目前都已过时 - 大多数用于 pre-v2,而最近的一个是对于2.0.0-alpha,它提供的代码与当前版本的 Identity 不匹配或不工作。

我已经尽我最大的努力去谷歌搜索那里的东西,但要么它不存在,要么我的谷歌软件今天很弱。我正在寻找有关如何将 DB 字段更改为 UniqueIdentifier(适用于 Guid)同时仍然让其他一切正常工作/转换的任何指针。

编辑:似乎有人或系统已将这篇文章作为可能的重复链接到另一篇文章。问题是,我已经链接到另一篇文章,因为它是 v1.x 的 Identity 用法,因此不直接适用。即使是我链接到的 2.0.0-alpha 代码也不起作用。即使是链接文章底部的附加材料,在 2.2.1 下也不起作用。

【问题讨论】:

  • 对不起,不是重复的。我不是想将 GUID 更改为整数,而是尝试将 DB 字段从 nvarchar(128) 更改为 UniqueIdentifier。我仍在使用 GUID,但我想要正确的 UniqueIdentifier 字段而不是字符串字段。我还没有建立我的数据库,所以这是确保 Identity 创建 UniqueIdentifier 主键字段而不是 nvarchar(128) 字段的最佳时机。
  • 我是说这些说明导致 Identity 2.2.1 几乎在每个部分都将项目涂成红色。至少控制器是意料之中的——他们正在处理字符串并且突然遇到 Guids。但是,当我的ApplicationDbContext() 通过throwIfV1Schema 以及我的GenerateUserIdentityAsync 通过manager 绘制时,该示例没有涵盖更深层次的问题。
  • 明白。我会删除建议。
  • 重新“使用字符串的控制器突然遇到 Guids”。您必须修复控制器才能使用 Guid。您为 2.0.0-alpha 链接的示例大多是正确的。当前发布的 Identity 并没有太大的不同。
  • 你看过这个指南吗? asp.net/identity/overview/extensibility/… 将 id 转换为 int 但原理是一样的。

标签: asp.net asp.net-mvc asp.net-mvc-5 asp.net-identity asp.net-identity-2


【解决方案1】:

也许this 会有所帮助:

实体框架 - 使用 Guid 作为主键

更新 因此,如果您将像这样使用 GUID:

[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public Guid Id { get; set; }

EF 将在您的数据库表中生成 uniqueidentifier,但重要的是,将列值设置为 (newsequentialid()) 并使 StoreGeneratedPattern 到身份。 所以这将自动生成下一个唯一 ID

using (ApplicationDbContext context = new ApplicationDbContext())
{
    var item = new Item
                 {
                     Name = "Random",
                     Description= "Person";
                 };

    context.Items.Add(item);
    context.SaveChanges();
    Console.WriteLine(item.Id);
}

首页这会有所帮助。

【讨论】:

  • 这适用于您可能想要手动创建的任何其他表。这不适用于 Identity 2.x,它会阻止您直接修改它使用的表。项目中没有任何地方可以像上面那样直接更改任何 Identity 表的主键。
猜你喜欢
  • 1970-01-01
  • 2013-11-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多