Tom*_*adi 19 c# asp.net entity-framework-core asp.net-core
升级到 Asp.Net Core 3.0 后,当我尝试创建用户时,我的 Identity 类出现以下错误:
无法跟踪类型为“用户”的实体,因为主键属性“id”为空。
这里 User 代表我对 Identity 模型的扩展。
这是发生错误的代码行:
var result = await _userManager.CreateAsync(user, password);
Run Code Online (Sandbox Code Playgroud)
Tom*_*adi 43
这是由于 EF Core 3.0 中的重大更改,可在此链接下找到:
这个问题可以通过像这样手动分配一个键来解决:
// assign GUID to Id
user.Id = Guid.NewGuid().ToString();
var result = await _userManager.CreateAsync(user, password);
Run Code Online (Sandbox Code Playgroud)
根据微软的说法,另一种解决方案如下:
3.0 之前的行为可以通过明确指定如果没有设置其他非空值,键属性应该使用生成的值来获得。例如,使用 fluent API:
modelBuilder
.Entity<Blog>()
.Property(e => e.Id)
.ValueGeneratedOnAdd();
Run Code Online (Sandbox Code Playgroud)
或者使用数据注释:
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public string Id { get; set; }
Run Code Online (Sandbox Code Playgroud)
Zoi*_*arp 13
这为我解决了这个问题。
protected override void OnModelCreating(ModelBuilder builder)
{
base.OnModelCreating(builder);
var keysProperties = builder.Model.GetEntityTypes().Select(x => x.FindPrimaryKey()).SelectMany(x => x.Properties);
foreach (var property in keysProperties)
{
property.ValueGenerated = ValueGenerated.OnAdd;
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
14751 次 |
| 最近记录: |