0

我有这个方法:

public async Task<TrainingPlan> CreateTrainingPlan(TrainingPlanDTO trainingPlan)
{
   TrainingPlan tp = new TrainingPlan
   {
     Name = trainingPlan.Name
   };

   // adding to context
   _context.TrainingPlan.Add(tp);

   // assign database identity id to property 
   trainingPlan.ResourceId = tp.Id;

   // more entities being saved in dbcontext

   // final save in database
   await dbcontext.SaveChangesAsync();
}

我想要的是在数据库本身的插入完成之后分配插入的实体的身份ID,以便不对数据库进行多次调用。我已经测试了该方法,并且trainingPlan.ResourceId始终为 0,因为它采用 tp.Id 的初始值,而不是在SaveChangesAsync调用该方法后分配的新值。

我需要保留对tp.Id. 在这种情况下是否可以使用 ref 关键字?

4

1 回答 1

0

另一种选择是使用手动生成的主键 - 也许是一个 guid,而不是使用自动生成的整数值。然后,您可以在将数据保存到数据库之前将新的 guid 分配给您正在创建的任何对象。您还需要更改主键对象和相关对象键的类型以匹配您要使用的任何主键类型。

private class TrainingPlan
{
public Guid ResourceID
public string Name
}

trainingPlan.ResourceID = Guid.NewGuid();
trainingPlan.subObject.parentTrainingPlan = trainingPlan.ResourceID
await dbcontext.SaveChangesAsync();
于 2022-01-10T17:22:03.363 回答