通过实体框架访问SQL Server 2008更改跟踪信息

时间:2010-01-22 16:29:41

标签: sql entity-framework sql-server-2008 linq-to-entities

基于this link看起来我可以通过简单地启用更改跟踪来使用Sql Server 2008免费获得日期插入/日期修改信息(无需触发器等)。我正在使用Entity Framework来访问数据。我的问题是,如何通过Entity Framework和LINQ访问数据库记录的日期修改/日期插入信息?
我正在使用VS2008,所以我还没有新的EF v4东西(但如果可以在新EF中完成,请告诉我。)
谢谢。

2 个答案:

答案 0 :(得分:0)

噢,没关系。我发现自己很容易在每个表中创建Inserted和LastModified列,为每个列设置默认值,并为LastModified构建更新触发器。这似乎是人们所做的,变化跟踪看起来像是主要用于同步。对?

答案 1 :(得分:0)

好的,这很好用(也见this article)...

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);
                }

            }
        }
    } 

}