Если два объекта связаны с одним и тем же DbContext, и они напрямую связаны (PK / FK), тогда лучшее решение состоит в том, чтобы убедиться, что у объектов есть свойство навигации, настроенное для отношения, и позволить EF управлять ключами и ссылки.
Например:
TimeSheetMaster masterModel = new TimeSheetMaster();
masterModel.FromDate = timeSheetModel.Proj1;
masterModel.ToDate = timeSheetModel.Proj1.AddDays(7);
masterModel.TotalHours = timeSheetModel.ProjTotal1;
masterModel.UserId = User.Identity.GetUserId();
masterModel.DateCreated = DateTime.Now;
masterModel.TimeSheetStatus = 1;
masterModel.Comment = timeSheetModel.ProjDesc1;
var detailsModel = CreateTimeSheetDetails(masterModel, timeSheetModel);
// either here, or inside CreateTimeSheetDetails...
// if Master has a collection of Details: (1-to-Many)
masterModel.Details.Add(details);
// or if Master has a 1-to-1 relationship to details.
// masterModel.Details = detailsModel;
context.TimeSheetMaster.Add(masterModel);
context.SaveChanges();
В идеале EF должен управлять вашими отношениями, чтобы ваш код просто работал со связанной структурой сущностей и передавал управление ключами / отношениями в Entity Framework.
Если вам нужны идентификаторы в контексте или для возврата после выполнения вставки, вы можете получить доступ к новому PK объекта сразу после вызова SaveChanges
:
context.TimeSheetMaster.Add(masterModel);
context.SaveChanges();
var newId = masterModel.TimeSheetMasterId; // Populated automatically after SaveChanges.