Расширение Entity Framework Save на один тип Entity - PullRequest
0 голосов
/ 17 мая 2011

У меня довольно большая подпрограмма сохранения, которая обновляет сотни элементов с использованием Entity Framework, а затем сохраняет весь лот за один раз.

using (var dc = new EntityLayer.Entities())
{
    dc.Entity1.Prop1 = 1;
    dc.Entity1.Prop2 = 2;
    dc.Entity2.Prop1 = 1;
    dc.Entity2.Prop2 = 2; // Audit item
    dc.Entity2.Prop3 = 3; // Audit item
    dc.Entity3.Prop1 = 1;
    ...
    dc.SaveChanges();
}

То, что я хотел бы сделать, так или иначерасширьте Сохранить для отдельного субъекта или воспользуйтесь этим изменением и запустите другой метод.

Основная цель этого - подключиться к нашей системе аудита, которая проверяет только некоторые ключевые элементы (например, толькоEntity2.Prop2 и Entity2.Prop3 в упрощенной версии выше), но, возможно, также будут запускать некоторые другие подпрограммы, создавать задачи и т. Д., Но суть в том, можно ли это сделать?дополнительную строку аудита, которую мы должны вставить для конкретных типов, как показано ниже:

using (var dc = new EntityLayer.Entities())
{
    dc.Entity1.Prop1 = 1;
    dc.Entity1.Prop2 = 2;
    dc.Entity2.Prop1 = 1;
    dc.Entity2.Prop2 = 2;
    dc.Audit.CreateObject() { Type = "Entity2", Change = "Prop2", From = oldVal, To = 2}
    dc.Entity2.Prop3 = 3;
    dc.Audit.CreateObject() { Type = "Entity2", Change = "Prop3", From = oldVal, To = 3}
    ...
    dc.SaveChanges();
}

1 Ответ

2 голосов
/ 17 мая 2011

Единственный способ - переопределить SaveChanges, найти измененные сущности и вызвать для них ваши подпрограммы.

public override int SaveChanges()
{
    var entities = ChangeTracker.Entries<Entity1>()
                                .Where(e => e.State == EntityState.Modified)
                                .Select(e => e.Entity);

    foreach(var entity in entities)
    {
        // call your rutine.
    }

    return base.SaveChanges();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...