C# 使用一对多关系注册新用户

C# 使用一对多关系注册新用户,c#,entity-framework,asp.net-identity,asp.net-core-3.1,C#,Entity Framework,Asp.net Identity,Asp.net Core 3.1,我正在使用ASP Net core 3.1Identity。我的场景如下:我创建了一个从IdentityUser继承的类Employee。Employee包含一些附加属性。其中一个是位置。 到目前为止,我有以下几点 public class Employee: IdentityUser { public string Name { get; set; } public Position JobPosition { get; set; } } 如图所示,我与

我正在使用ASP Net core 3.1Identity。我的场景如下:我创建了一个从IdentityUser继承的类Employee。Employee包含一些附加属性。其中一个是位置。 到目前为止,我有以下几点

 public class Employee: IdentityUser
 {
        public string Name { get; set; }
        public Position JobPosition { get; set; }
 }
如图所示,我与表位置有一个关系(FK)。这样做的目的是为一名新员工注册我想要的职位。 我已经更新了注册模板以包含JobPosition,这里的重要部分是OnPostAsync

public async Task<IActionResult> OnPostAsync(string returnUrl = null)
{
   returnUrl = returnUrl ?? Url.Content("~/");
   ExternalLogins = (await _signInManager.GetExternalAuthenticationSchemesAsync()).ToList();
   var jobPosition = await _service.Read(JobPositionId);
   if (ModelState.IsValid)
   {
     var user = new Employee{ 
           UserName = Input.UserName,
           Email = Input.Email, 
           JobPosition = jobPosition, 
           Name = Input.Name, 
      };
      var result = await _userManager.CreateAsync(user, Input.Password);

....rest of the code
PostAsync上的公共异步任务(字符串returnUrl=null) { returnUrl=returnUrl??Url.Content(“~/”); ExternalLogins=(wait _signInManager.GetExternalAuthenticationSchemesAsync()).ToList(); var jobPosition=wait_service.Read(JobPositionId); if(ModelState.IsValid) { var user=新员工{ UserName=Input.UserName, Email=Input.Email, JobPosition=JobPosition, Name=Input.Name, }; var result=await\u userManager.CreateAsync(用户,输入,密码); ……代码的其余部分 我从正在使用的db服务中获取JobPosition对象,然后实例化Employee类,但当它将新用户注册到db时,会显示以下消息:

处理请求时发生未处理的异常。 SqlException:当identity\u insert设置为OFF时,无法在表“Position”中插入identity列的显式值。 Microsoft.Data.SqlClient.SqlCommand+c.b__164_0(任务结果) DbUpdateException:更新条目时出错。有关详细信息,请参阅内部异常。 Microsoft.EntityFrameworkCore.Update.ReaderModificationCommandBatch.ExecuteAsync(IRelationalConnection连接,CancellationToken CancellationToken)

据我所知,它试图在Employee表和Position表中创建一个新条目(我认为是级联db insert),但我只想通过FK链接这两个实体。
我的意思是,用提供的数据创建一个新员工(我有一个包含所有职位的下拉组件,我从中选择一个职位并分配给该员工)但是JobPosition应该是FK,而不是Position表中的新行。

首先要检查的是这里的
\u service
\u userManager
是否指向同一个DbContext实例。如果
\u service.Read()
call返回一个分离的实体,而_userManager使用的DbContext或添加员工的更高版本的代码不跟踪该实体,那么DbContext将把Position实体视为一个新实体并尝试插入它。这里的关键是如何为这些服务提供DbContext实例。(即依赖注入?如果是,提供的DbContext的生存期范围是什么?)