Я использую EF Code First, но мои модели НЕ имеют отношений (PK-FK). Поэтому я пытаюсь найти способ обойти это, используя EF6 Reflections, чтобы избежать удаления записи, которая будет иметь отношения (то же имя свойства).
- Поиск всех объектов моего контекста, в которых есть какое-либо определенное свойство (FK);
- Для каждого найденного объекта проверьте, есть ли у этого объекта какая-либо запись;
- Если это правда, вместо удаления моей записи установите для свойства «Отменено» значение true;
Если это ложно, оставьте состояние объекта удаленным и сохраните мои изменения контекста;
public override int SaveChanges() { foreach (var myEntity in ChangeTracker.Entries<IAuditable>()) { if (myEntity.State == EntityState.Deleted) { ObjectContext objContext = ((IObjectContextAdapter)this).ObjectContext; var container = objContext.MetadataWorkspace.GetEntityContainer(objContext.DefaultContainerName, DataSpace.CSpace); var objectStateEntry = ((IObjectContextAdapter)this).ObjectContext.ObjectStateManager.GetObjectStateEntry(myEntity.Entity); var entityKeys = objectStateEntry.EntityKey.EntityKeyValues; var entity = myEntity; var hasAnyFk = false; foreach (var entityKey in entityKeys) { if (hasAnyFk) { break; } var keyName = entityKey.Key; foreach (var entitySet in container.EntitySets) { hasAnyFk = entitySet.ElementType.Members.Any(es => es.Name == keyName); if (hasAnyFk) { break; } } } if (hasAnyFk) { var deletedProperty = myEntity.OriginalValues.PropertyNames.Where(p => myEntity.Property(p).Name == "Deleted").FirstOrDefault(); if (deletedProperty != null) { myEntity.State = EntityState.Modified; myEntity.CurrentValues[deletedProperty] = true; } } } }
вернуть base.SaveChanges(); }
hasAnyFk = entitySet.ElementType.Members.Any(es => es.Name == keyName); if (hasAnyFk) { ?? How to make a dynamic select using this entity ?? }
- person Rubens Mussi Cury   schedule 12.12.2016