【问题标题】:Can I tell linq 2 SQL not to update certain columns after attachment or use of UpdateModel?我可以告诉 linq 2 SQL 在附加或使用 UpdateModel 后不要更新某些列吗?
【发布时间】:2014-08-11 09:07:35
【问题描述】:

假设我有以下情况,我的服务中的更新方法接受一个模型(将要更新的模型)作为输入参数。模型可以是未附加的(在这种情况下,在提交更改之前调用附加方法)或附加的(在这种情况下我们只是提交更改)。编辑操作只需在我的服务中调用此更新方法。现在让我们假设我无法更改这些操作中的代码(生成要更新的模型的代码)。我还能以某种方式阻止某些列从更新方法中更新吗?请注意,我可能想使用 linq to SQL 设置这些列,但仅限于插入方法期间。

我很确定我在这里尝试了一些非常规的东西,但它可能会帮助我编写一些易于重用的代码。如果做不到,那我就换个方式解决,但尝试新的东西总不会有坏处。

【问题讨论】:

    标签: c# linq-to-sql


    【解决方案1】:

    Attach 方法确实提供了一个覆盖来接受修改后的实体和原始实体。 Attach Modified Entity on Data Context

    使用此功能时,内部更改跟踪器将确定哪些列已更新,并且只会更新数据源上已更改的那些列,而不是更新所有列。

    或者,如果您想要更明确地控制更新哪些属性,您可以将实体重新附加为原始状态未修改: Attach Modified/Unmodified Entity on Data Context

    这会将内部更改跟踪器连接到实体上的 PropertyChanging 事件,以便对其进行跟踪。然后,您只需在 Service 的 Update 方法中更改该实体的属性值。

        void Update(MyModel model)
        {
            using (MyContext ctx = new MyContext())
            {
                ctx.DeferredLoadingEnabled = false;
                ctx.MyEntities.Attach(model.OriginalEntity);
                model.OriginalEntity.Value = model.ModifiedEntity.Value;
                ctx.SubmitChanges();
            }
        }
    

    这些方法的缺陷意味着您必须同时维护模型中的原始实体和修改后的实体,但可以在加载实体时设置 - 对象的简单浅表副本应该通过从 ICloneable 派生来解决问题每个实体的部分类。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-10-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多