在实体框架中查找变更集

发布于 2024-11-03 23:16:33 字数 315 浏览 1 评论 0原文

我在 ASP.NET MVC3/WCF 应用程序中使用 EF4 存储库。我正在使用工作单元模式将更改应用到数据库,

用户要求之一是创建包含实体更改列表的票证/电子邮件。有没有办法可以在以下函数中仅检测实体上更改的属性?

public void UpdateTrackedEntity<T>(T modifiedEntity) where T : class
{
    var set = CreateObjectSet<T>();
    set.ApplyCurrentValues(modifiedEntity);
}

I am using EF4 repositories in a ASP.NET MVC3/WCF application. I am using the Unit of Work pattern to apply changes to the database

One of the user requirements is to create a ticket/email with a list of changes to the entity. Is there a way I can detect only the changed properties on an entity in the following function?

public void UpdateTrackedEntity<T>(T modifiedEntity) where T : class
{
    var set = CreateObjectSet<T>();
    set.ApplyCurrentValues(modifiedEntity);
}

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

落叶缤纷 2024-11-10 23:16:33

是的,有一种方法:

public void UpdateTrackedEntity<T>(T modifiedEntity) where T : class
{
    var set = CreateObjectSet<T>();
    set.ApplyCurrentValues(modifiedEntity);
    var entry = ObjectStateManager.GetObjectStateEntry(modifiedEntity);
    // entry has two collections: CurrentValues (those you applied) and 
    // OriginalValues (those loaded from DB)
    // It also have method GetModifiedProperties to get collection of modified 
    // property names.
}

检查 ObjectStateEntry更多细节。

Yes there is a way:

public void UpdateTrackedEntity<T>(T modifiedEntity) where T : class
{
    var set = CreateObjectSet<T>();
    set.ApplyCurrentValues(modifiedEntity);
    var entry = ObjectStateManager.GetObjectStateEntry(modifiedEntity);
    // entry has two collections: CurrentValues (those you applied) and 
    // OriginalValues (those loaded from DB)
    // It also have method GetModifiedProperties to get collection of modified 
    // property names.
}

Check ObjectStateEntry for more details.

榕城若虚 2024-11-10 23:16:33

假设您的域服务对象是 DsrvObj

 DsrvObj.EntityContainer.GetChanges() 
                      ...GetChanges().AddedEntities.Count /*also possible for modified and romoved ones*/

//这些可能是有益的,也

           DsrvObj.HasChanges
           DsrvObj.MS_EntitySets.HasChanges

将为您提供变更集,但有趣的是,我今天在这个变更集中看不到一些修改的布尔字段!最后我意识到,例如,如果 DataGrid 处于编辑模式,您的更改不会进入变更集,结束编辑后它会进入变更集。

实施它,测试它,相信它!

Suppose that your domain service object is DsrvObj

 DsrvObj.EntityContainer.GetChanges() 
                      ...GetChanges().AddedEntities.Count /*also possible for modified and romoved ones*/

//These ones could be beneficial also

           DsrvObj.HasChanges
           DsrvObj.MS_EntitySets.HasChanges

will give you the changeset, But interestingly I can't see some modified boolean fields on this changeset today! Finally I realized that for instance if a DataGrid is in EditMode your changes doesnt go to changeset,After end edit it goes to changeset.

implement it ,test it ,Trust it!

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文