【发布时间】:2019-09-22 18:35:20
【问题描述】:
我有一个项目。我想为它添加标识。但是会发生错误。我将尝试通过示例来描述 我创建没有身份的新项目。 创建新类“用户”。
public class User
{
public int Id { get; set; }
public string Surname { get; set; }
}
创建上下文
public class UserContext : DbContext
{
public UserContext() : base("DefaultConnection")
{ }
}
更新数据库并添加 3 个项目。
接下来我要添加身份。
PM> Install-Package Microsoft.AspNet.Identity.Owin
PM> Install-Package Microsoft.AspNet.Identity.EntityFramework
PM> Install-Package Microsoft.Owin.Host.SystemWeb
更新类
public class User : IdentityUser
{
public string Surname { get; set; }
}
更新上下文
public class UserContext: IdentityDbContext<User>
{
public UserContext() : base("DefaultConnection")
{ }
}
下一步:添加迁移
Error:
Identity column 'Id' must be of data type int, bigint, smallint, tinyint,
or decimal or numeric with a scale of 0, unencrypted,
and constrained to be nonnullable.
我更新了迁移文件
//AlterColumn("dbo.AspNetUsers", "Id", c => c.Int(nullable: false, identity: true));
DropColumn("dbo.AspNetUsers", "Id");
AddColumn("dbo.AspNetUsers", "Id", c => c.String(nullable: false, maxLength: 128));
下一步:更新数据库
Error:
The CREATE UNIQUE INDEX statement terminated because a duplicate key
was found for the object name 'dbo.AspNetUsers'
and the index name 'PK_dbo.AspNetUsers'.
The duplicate key value is ().
如何解决问题?
【问题讨论】:
-
IdentityUser是The default implementation ofIdentityUser<TKey>which uses a string as a primary key。这意味着:使用IdentityUser<int>。 -
我想要使用完整的功能标识,并且需要最少的维修。所以我想要使用字符串 ID
-
您需要在 Id 列中填写一些内容。我猜你想使用电子邮件地址或用户名。
-
ID 列填充 autoincrimen 值 1,2,3
-
我想将功能从有身份的项目转移到没有身份的项目。这是第一步。
标签: c# entity-framework model-view-controller