【问题标题】:EntityDataSource Override with a custom Delete使用自定义 Delete 覆盖 EntityDataSource
【发布时间】:2010-11-25 11:30:12
【问题描述】:

我有一个使用 EntityDataSource 和 DevExpress aspxGridView 的 ASP .net C# 项目,它运行良好,允许我选择、更新、插入和删除。但是,我想改用自定义删除方法,它基本上只是进行更新(只是将活动标志设置为 false),而不是真正的删除。

我觉得我需要使用 entitydatasource 或网格 onrowdeleting 事件,但这是我第一个使用 Entity Framework 4.0 的项目,所以我还在寻找自己的脚。我不知道是否需要在 edmx 代码隐藏文件中创建覆盖更新方法。

非常感谢任何帮助。

【问题讨论】:

    标签: c# asp.net entity-framework-4 devexpress aspxgridview


    【解决方案1】:

    您可以在 SavingChanges 事件上注册一个处理程序来执行您想要的操作。 像这样:

    public partial class AWEntities{ 
    
    partial void OnContextCreated()
    {
        this.SavingChanges += new EventHandler(context_SavingChanges);// Register the handler for the SavingChanges event.
    }
    
    private static void context_SavingChanges(object sender, EventArgs e)// SavingChanges event handler.
    {
        // Get all in Deleted state
        foreach (ObjectStateEntry entry in
            ((ObjectContext)sender).ObjectStateManager.GetObjectStateEntries(EntityState.Deleted))
        {
            if (entry.Entity.GetType() == typeof(MyType)))
            {
                // do what you want.
            }
        }
    }
    }
    

    http://msdn.microsoft.com/en-us/library/cc716714.aspx

    或者您可以映射存储过程以按照您想要的方式执行删除。 http://learnentityframework.com/LearnEntityFramework/tutorials/using-stored-procedures-for-insert-update-amp-delete-in-an-entity-data-model/

    我更喜欢第二种选择...

    【讨论】:

    • 谢谢罗伯托,去映射存储过程选项
    • 我对为 CRUD 操作映射存储过程的唯一担忧是我喜欢跟踪执行操作的用户,除非我在该实体中有一个用户 id 字段,并且使用每次被引用时的当前用户。当您的应用程序在与数据库不同的服务器上运行时,您不能依赖模拟和触发器来跟踪负责的用户。考虑到这个目标,第一个建议对我来说看起来更好。
    • 请注意,如果您指定一个删除 SP,那么您还需要为插入和更新操作提供一个 SP...
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-03-22
    • 1970-01-01
    • 2013-05-05
    • 1970-01-01
    • 2014-02-09
    • 2021-03-08
    • 1970-01-01
    相关资源
    最近更新 更多