【问题标题】:Access SQL Server 2008 Change Tracking Info via Entity Framework通过实体框架访问 SQL Server 2008 更改跟踪信息
【发布时间】:2010-01-22 16:29:41
【问题描述】:

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

【问题讨论】:

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


    【解决方案1】:

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

    【讨论】:

    • 哇!!!但是现在,尽管如果我在数据库中手动插入/编辑,默认值和触发器工作得很好,但在使用实体框架添加/修改时它们保持为空!我什至尝试过 [Bind(Exclude = "Id, Created, LastModified")] 但仍然没有运气。帮助!我可以“不接受”我之前的回答吗:-)
    【解决方案2】:

    好的,这很好用(另见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);
                    }
    
                }
            }
        } 
    
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-04-23
      • 2012-10-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-12-08
      • 2011-10-27
      相关资源
      最近更新 更多