Entity Framework, как добавить свойства во время сохранения, необходимые для всех объектов - PullRequest
1 голос
/ 10 ноября 2011

Я использую структуру сущностей, и у меня есть некоторые свойства, которые являются общими для всех сущностей:

CreatedByUserName CreatedDateTime LastModifiedByUserName LastModifiedDatetime

Так что в настоящее время я сохраняю новое свойство, и я 'Мне нужно сделать так:

_db.ProjectApprovals.Add(projectApproval);
                    projectApproval.CreatedByUserName = "Dev";
                    projectApproval.CreatedDateTime = DateTime.Now;
                    _db.SaveChanges();

Как вы можете себе представить, нужно сделать:

projectApproval.CreatedByUserName = "Dev";
                        projectApproval.CreatedDateTime = DateTime.Now;

для всех сущностей, каждое сохранение - это боль.Я думал об упаковке сейва, и тогда я мог сделать это там.Проблема в том, как узнать, какие объекты в контексте были добавлены или изменены.

1 Ответ

2 голосов
/ 10 ноября 2011

Прежде всего вы должны определить общий интерфейс для всех ваших сущностей, реализующих эти свойства:

public interface IEntity
{
    string CreatedByUserName { get; set; }
    DateTime CreatedDateTime { get; set; }
    ...
}

Реализуйте этот интерфейс в ваших сущностях и переопределите метод SaveChanges в своем производном ObjectContext.

public override int SaveChanges(SaveOptions saveOptions)
{
    var entries = this.ObjectStateManager
                      .GetObjectStateEntries(EntityState.Added | EntityState.Modified)
                      .Where(x => !x.IsRelationship && x.Entity is IEntity);

    foreach (var entry in entiries)
    {
       var entity = entry.Entity as IEntity;

       if (entry.State == EntityState.Added)
       {
          ...
       } 
       else
       { 
          ...
       }
    }


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