/// <summary> /// Invoked after the SqlQuery to insert the record for the instance has been executed. /// </summary> /// <param name="instance">The instance which has been inserted.</param> /// <param name="executeScalarResult">The execute scalar result (the identifier value returned by the database /// or null if the identifier is <see cref="IdentifierStrategy" />.Assigned.</param> /// <exception cref="ArgumentNullException">Thrown if instance is null or IdentifierStrategy is DbGenerated /// and executeScalarResult is null.</exception> public void AfterInsert(object instance, object executeScalarResult) { if (instance is null) { throw new ArgumentNullException(nameof(instance)); } if (executeScalarResult is null) { return; } IObjectInfo objectInfo = ObjectInfo.For(instance.GetType()); if (objectInfo.TableInfo.IdentifierStrategy != IdentifierStrategy.Assigned) { if (s_log.IsDebug) { s_log.Debug(LogMessages.IListener_SettingIdentifierValue, objectInfo.ForType.FullName, executeScalarResult.ToString()); } Type propertyType = objectInfo.TableInfo.IdentifierColumn.PropertyInfo.PropertyType; if (executeScalarResult.GetType() != propertyType) { object converted = Convert.ChangeType(executeScalarResult, propertyType, CultureInfo.InvariantCulture); objectInfo.SetIdentifierValue(instance, converted); } else { objectInfo.SetIdentifierValue(instance, executeScalarResult); } } }