/// <summary> /// Initializes a new instance of the <see cref="UpdateEntryDto"/> class. /// </summary> /// <param name="entry">The state entry of an entity.</param> /// <param name="mapper">The <see cref="IDynamicObjectMapper" /> used for mapping the property values.</param> public UpdateEntryDto(IUpdateEntry entry, IDynamicObjectMapper mapper) { DynamicObject CreateValueDto(IProperty propertyBase, object value) { value = Utils.ConvertToProvider(value, propertyBase); return(mapper.MapObject(value)); } this.EntityTypeName = entry.EntityType.DisplayName(); this.EntityState = entry.EntityState; this.PropertyDatas = entry.ToEntityEntry().Properties.Select( prop => new PropertyData { Name = prop.Metadata.Name, OriginalValueDto = prop.Metadata.GetOriginalValueIndex() >= 0 ? CreateValueDto(prop.Metadata, prop.OriginalValue) : null, CurrentValueDto = CreateValueDto(prop.Metadata, prop.CurrentValue), IsModified = prop.IsModified, IsTemporary = prop.IsTemporary, }).ToList(); if (entry.EntityType.HasDefiningNavigation()) { var ownership = entry.EntityType.GetForeignKeys().Single(fk => fk.IsOwnership); this.DelegatedIdentityDatas = ownership.Properties.Select( prop => new PropertyData { Name = prop.Name, OriginalValueDto = CreateValueDto(prop, entry.GetOriginalValue(prop)), CurrentValueDto = CreateValueDto(prop, entry.GetCurrentValue(prop)), IsModified = entry.IsModified(prop), IsTemporary = entry.HasTemporaryValue(prop), }).ToList(); } }
public static WriteModel <TEntity> ToMongoDbWriteModel <TEntity>([NotNull] this IUpdateEntry updateEntry) { Check.NotNull(updateEntry, nameof(updateEntry)); if (!typeof(TEntity).GetTypeInfo().IsAssignableFrom(updateEntry.EntityType.ClrType)) { throw new InvalidOperationException($"Entity must derive from {nameof(TEntity)}."); } if (updateEntry.EntityState != EntityState.Added && updateEntry.EntityState != EntityState.Modified && updateEntry.EntityState != EntityState.Deleted) { throw new InvalidOperationException($"Entity state must be Added, Modified, or Deleted."); } WriteModel <TEntity> writeModel; switch (updateEntry.EntityState) { case EntityState.Added: writeModel = ToInsertModel <TEntity>(updateEntry as InternalEntityEntry); break; case EntityState.Modified: writeModel = new ReplaceOneModel <TEntity>( GetIdFilter <TEntity>(updateEntry), (TEntity)updateEntry.ToEntityEntry().Entity); break; default: writeModel = new DeleteOneModel <TEntity>(GetIdFilter <TEntity>(updateEntry)); break; } return(writeModel); }
/// <summary> /// This API supports the Entity Framework Core infrastructure and is not intended to be used /// directly from your code. This API may change or be removed in future releases. /// </summary> public virtual void Create(IUpdateEntry entry) { var key = CreateKey(entry); _docrows.Insert(BsonMapper.Global.ToDocument(entry.ToEntityEntry().Entity)); }