【问题标题】:Possible problems after changing type of id from string (GUID) to int?将 id 类型从 string (GUID) 更改为 int 后可能出现的问题?
【发布时间】:2016-07-30 19:33:45
【问题描述】:

我在我的 MVC5 项目中使用 ASP.NET Identity 2.0 并希望将 AspNetUsers 的 id 字段的数据类型从 string (GUID) 更改为 int,因为我有一些与 AspNetUsers 表相关的表。我在How to change type of id in Microsoft.AspNet.Identity.EntityFramework.IdentityUser 上查看了许多页面,但似乎并不容易申请。另一方面,我看到更改 AspNetUsers 实体的 id 字段的数据类型是不够的,因为其他身份类型(即 AspNetUserRoles、ApplicationGroupRoles 等)之间存在一些 pk/fk 关系。在这种情况下,我应该使用身份表的原始数据类型并将我的表的 id 类型从 int 更改为 string?或者如何在 ASP.NET Identity 2.0 中轻松更改所有身份表的数据类型?如果这在 3.0 版本中更容易,我也可以使用它。

【问题讨论】:

  • 为什么你不让带有字符串 Id 的用户和所有其他带有 int Id 的表?
  • @LucianBumb 我不确定 PK/FK 关系是否是个好主意。所以,我认为最好的想法是使用 int 自定义表并将 id 类型从字符串转换为 int 用于 asp.net 身份表。有什么建议吗?
  • 伙计,我为做你现在正在尝试的事情付出了很多努力,因为我确信我不能在某些实体中拥有string Id,在其他实体中拥有int,直到我决定做一个测试,看看会出现什么问题。结果没问题!你只需要小心,userId 就是string

标签: asp.net-mvc asp.net-identity guid asp.net-identity-2 asp.net-identity-3


【解决方案1】:

我想扩展我的评论,因为几个月前我也试图这样做。

就我而言,我不确定是否可以创建关系 string -> int,首先来自数据库,并用于创建 productId(int) 和 userId(int) 之间的关系,我想拥有int id 到处都是。

你可以让userId 喜欢string 并创建这样的关系;

public class Customer
{
  public int Id {get;set;}
  public string Name {get;set;}

  public string SalesManId {get;set;}
  [ForeignKey("SalesManId ")]
  public virtual ApplicationUser SalesMan {get;set;}
}

这里是Customer 实体,我已经声明了一个导航属性! 因此,SalesManId 的类型为 string。通过这种方式,您可以创建与ApplicationUser 类的所有关系。

如果您仍想更改为 int,这里有一个 youtube 教程,我在几个月前遵循了该教程,并设法从 string 更改为 int

YouTube tutorial-How to change UserId from string to int

【讨论】:

  • 非常感谢您的回复。实际上我在 pk/fk 关系创建过程中遇到了很多问题,我认为如果我通过将身份表的数据类型从字符串更改为 int 来解决问题会更好。 >>>
  • 所以,我查看了asp.net/identity/overview/extensibility/… 上的原始帖子,但不确定是否必须将自定义类添加到在步骤“添加使用密钥类型的自定义身份类”中解释的 IdentityModels。因为我现在正在创建项目,并且当前没有创建表。我的意思是我可以修改当前类而不是添加自定义类吗?
  • @binary 我在答案中插入了一个指向教程的链接,该链接正在逐步说明如何做到这一点。
猜你喜欢
  • 1970-01-01
  • 2016-10-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-04-28
  • 2023-01-08
  • 2017-05-12
  • 2021-01-27
相关资源
最近更新 更多