Доступ к информации об отслеживании изменений SQL Server 2008 через Entity Framework - PullRequest
2 голосов
/ 22 января 2010

На основе этой ссылки похоже, что я могу получить дату вставки / информацию о дате изменения "бесплатно" (без необходимости триггеров и т. Д.), Используя Sql Server 2008, просто включив отслеживание изменений. Я использую Entity Framework для доступа к данным. У меня вопрос, как мне получить доступ к информации об изменении даты / вставке даты для записей базы данных через Entity Framework и LINQ?
Я использую VS2008, поэтому у меня пока нет нового EF v4 (но если это можно сделать в новом EF, пожалуйста, дайте мне знать).
Благодарю.

Ответы [ 2 ]

0 голосов
/ 23 января 2010

ОК, это прекрасно работает (см. Также эту статью ) ...

public partial class MyEntities
{
    partial void OnContextCreated()
    {
        this.SavingChanges += new System.EventHandler(CustomSavingChangesLogic);
    }

    /// <summary>
    /// Apply timestamps
    /// </summary>
    public void CustomSavingChangesLogic(object sender, System.EventArgs e)
    {
        var changedEntities = ((ObjectContext)sender).ObjectStateManager.GetObjectStateEntries(EntityState.Added | EntityState.Modified);
        foreach (var stateEntryEntity in changedEntities)
        {
            if(!stateEntryEntity.IsRelationship) {
                var entity = stateEntryEntity.Entity;
                var lastModifiedPropInfo = entity.GetType().GetProperty("LastModified");
                if (lastModifiedPropInfo != null)
                    lastModifiedPropInfo.SetValue(entity, DateTime.UtcNow, null);
                if (stateEntryEntity.State == EntityState.Added)
                {
                    var createdPropInfo = entity.GetType().GetProperty("Created");
                    if (createdPropInfo != null)
                        createdPropInfo.SetValue(entity, DateTime.UtcNow, null);
                }

            }
        }
    } 

}
0 голосов
/ 22 января 2010

Оу, неважно. Мне было очень легко просто создать столбцы Inserted и LastModified в каждой таблице, установить для каждого из них значение по умолчанию и создать триггер обновления для LastModified. Похоже, именно это и делают люди, а отслеживание изменений выглядит так, будто оно в основном настроено на синхронизацию. Правильно?

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