2010-01-22 70 views
2

基于this link它看起来像我可以通过简单地使更改跟踪获取日期插入/修改日期的信息“免费”(无需触发器等)使用SQL Server 2008 。我正在使用实体框架来访问数据。我的问题是,如何通过Entity Framework和LINQ访问数据库记录的日期修改/日期插入信息?
我使用VS2008,所以我没有新的EF v4的东西,但(但如果它能够在新的EF来完成请让我知道)。
谢谢。访问SQL Server 2008中的更改跟踪信息通过实体框架

回答

0

OK,这个精美的作品(见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); 
       } 

      } 
     } 
    } 

} 
0

哦,没关系。我发现很容易,只需在每个表中创建Inserted和LastModified列,为每个表设置默认值,然后为LastModified构建更新触发器。这似乎是人们所做的事情,而变更跟踪看起来像主要是为了同步而设置的。对?

+0

哇!但是现在尽管如果我在数据库中手动插入/编辑,默认和触发器的工作效果很好,但使用实体框架添加/修改时它们仍然为空!我甚至试过[绑定(排除=“Id,创建,LastModified”)]但仍然没有运气。帮帮我! 我可以“不接受”我的在先答案:-) – Vince 2010-01-22 22:53:54