Aji*_*oel 2 c# entity-framework entity-framework-core asp.net-core
将记录插入子表中时出现以下错误,为什么当我要求实体框架将记录插入子表(关键字表)中时,Entity Framework Core尝试将记录插入父表(IdentityUser表)中?
堆栈跟踪:
An unhandled exception occurred while processing the request.
SqlException: Violation of PRIMARY KEY constraint 'PK_IdentityUser'. Cannot insert duplicate key in object 'dbo.IdentityUser'. The duplicate key value is (39b72c3a-b5bf-43e4-84f9-5cddbe79f6e3).
The statement has been terminated.
Run Code Online (Sandbox Code Playgroud)
模型:
public class Keyword
{
public Keyword() { }
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int KeywordId { get; set; }
public IdentityUser User { get; set; }
public string Value { get; set; }
[Timestamp]
public byte[] RowVersion { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
将记录保存到“关键字”表的代码:
var keywords = new List<Keyword>();
var identityUser = await UserManager.GetUserAsync(User);
foreach (var keywordString in keywordsThatNeedToBeSaved)
{
keywords.Add(new Keyword()
{
User = identityUser,
Value = keywordString
});
}
ScrubberDbContext.Keywords.AddRange(keywords);
await ScrubberDbContext.SaveChangesAsync();
Run Code Online (Sandbox Code Playgroud)
将关键字类别更改为:
public class Keyword
{
public Keyword() { }
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int KeywordId { get; set; }
public int? UserId { get; set; }
[ForeignKey("UserId")]
public IdentityUser User { get; set; }
public string Value { get; set; }
[Timestamp]
public byte[] RowVersion { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
并将保存记录更改为:
var keywords = new List<Keyword>();
var identityUser = await UserManager.GetUserAsync(User);
foreach (var keywordString in keywordsThatNeedToBeSaved)
{
keywords.Add(new Keyword()
{
UserId = identityUser.Id,
Value = keywordString
});
}
ScrubberDbContext.Keywords.AddRange(keywords);
await ScrubberDbContext.SaveChangesAsync();
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
682 次 |
| 最近记录: |