private static void Write(this IEntityEntryWriter writer, IEnumerable <EntityEntry> entries, SerializationMode mode) { foreach (var entityEntry in entries.OrderedByMetadata( )) { writer.Write(entityEntry, mode); } }
public static async Task <int> SaveChangesAsync(this DbContext context, IEntityEntryWriter writer, CancellationToken cancellationToken = default) { if (context == null) { throw new ArgumentNullException(nameof(context)); } if (writer == null) { throw new ArgumentNullException(nameof(writer)); } var snapshots = context.ChangeTracker.Entries( ).GetSnapshots( ); var rowCount = await context.SaveChangesAsync(cancellationToken) .ConfigureAwait(false); foreach (var snapshot in snapshots) { writer.Write(snapshot.EntityEntry, snapshot.EntityState == EntityState.Added ? SerializationMode.ValuesGeneratedOnAdd : SerializationMode.ValuesGeneratedOnUpdate, snapshot.Properties); } return(rowCount); }
public static void SerializeGraphChanges(this DbContext context, IEntityEntryWriter writer, params object [] items) { if (context == null) { throw new ArgumentNullException(nameof(context)); } if (writer == null) { throw new ArgumentNullException(nameof(writer)); } writer.Write(context.Graph(items).Where(IsChanged), SerializationMode.Changes); }
public static void SerializeChanges(this DbContext context, IEntityEntryWriter writer) { if (context == null) { throw new ArgumentNullException(nameof(context)); } if (writer == null) { throw new ArgumentNullException(nameof(writer)); } writer.Write(context.ChangeTracker.Entries( ).Where(IsChanged), SerializationMode.Changes); }
public static void SerializeGraph(this DbContext context, IEntityEntryWriter writer, object item) { if (context == null) { throw new ArgumentNullException(nameof(context)); } if (writer == null) { throw new ArgumentNullException(nameof(writer)); } writer.Write(context.Graph(item), SerializationMode.Full); }
public static int SaveChanges(this DbContext context, IEntityEntryWriter writer) { if (context == null) { throw new ArgumentNullException(nameof(context)); } if (writer == null) { throw new ArgumentNullException(nameof(writer)); } var snapshots = context.ChangeTracker.Entries( ).GetSnapshots( ); var rowCount = context.SaveChanges( ); foreach (var snapshot in snapshots) { writer.Write(snapshot.EntityEntry, snapshot.EntityState == EntityState.Added ? SerializationMode.ValuesGeneratedOnAdd : SerializationMode.ValuesGeneratedOnUpdate, snapshot.Properties); } return(rowCount); }
private static void Write(this IEntityEntryWriter writer, EntityEntry entityEntry, SerializationMode mode, IDictionary <IProperty, object?>?originalValues = null) { var state = entityEntry.State; writer.WriteStartEntry( ); writer.WriteEntityType(entityEntry.Metadata); writer.WriteEntityState(state); var properties = entityEntry.Properties.ToList( ); var writeAllProperties = mode == SerializationMode.Full && state != EntityState.Deleted || state == EntityState.Added; if (originalValues != null) { foreach (var property in properties) { if (writeAllProperties || property.Metadata.IsPrimaryKey( ) || property.Metadata.IsConcurrencyToken) { if (originalValues.TryGetValue(property.Metadata, out var originalValue)) { writer.WriteProperty(property.Metadata, originalValue); } else { writer.WriteProperty(property.Metadata, property.OriginalValue); } } } } else { foreach (var property in properties) { if (writeAllProperties || property.Metadata.IsPrimaryKey( ) || property.Metadata.IsConcurrencyToken) { writer.WriteProperty(property.Metadata, property.OriginalValue); } } } var modifiedProperties = mode switch { SerializationMode.ValuesGeneratedOnAdd => properties.Where(HasValueGeneratedOnAdd), SerializationMode.ValuesGeneratedOnUpdate => properties.Where(HasValueGeneratedOnUpdate), _ => properties.Where(property => property.IsModified) }; foreach (var modifiedProperty in modifiedProperties) { writer.WriteModifiedProperty(modifiedProperty.Metadata, modifiedProperty.CurrentValue); } if (mode == SerializationMode.Full) { foreach (var collection in entityEntry.Collections) { if (collection.IsLoaded) { writer.WriteNavigationState(collection.Metadata); } } } writer.WriteEndEntry( ); }