Ado.net实体数据模型-Crud问题

时间:2019-03-18 14:44:21

标签: entity-framework crud

我是ADO.net实体数据模型的新手。

由于在网上寻找答案时会感到困惑,我需要一些建议。所以我有一个具有2.5m +记录的现有MS SQL DB。标准的SQL数据连接正在变慢,因此我研究了EF。

数据库由表/视图和存储过程组成。使用标准的SQL连接,我一直在使用“视图”显示3个或更多表中的数据(视图确实包含联接),并使用“存储过程”进行CRUD操作。

所以我正在寻找建议:-

我可以使用当前形式的现有数据库吗?我已经尝试过这种方法,并且在单个表上可以完全正常工作取得了一些成功。

执行上述操作的步骤是新建项目-然后添加新的ado.net实体数据模型-选择1个表。 -然后展开项目-然后将EntityServerModeDataSource添加到页面-选择ID和表名-启用删除和更新-然后将aspxgridview添加到页面并绑定数据源。如下所述修改后面的代码。修改模型映射以包括SQL存储过程并运行和测试项目。

然后,我尝试使用一个视图和2个存储过程(更新,删除)。删除工作正常,但更新引发并显示以下错误: System.ArgumentException:'传递的主键值的数量必须与在实体上定义的主键值的数量匹配。 参数名称:keyValues'

这是我要删除的代码:-

protected void EntityServerModeDataSource1_Deleting(object sender, 
DevExpress.Data.Linq.LinqServerModeDataSourceEditEventArgs e)
    {
        int ID = (int)e.Keys[ASPxGridView1.KeyFieldName];


        using (overstayEntities1 context = new overstayEntities1())
        {
            var item = context.zactests.Find(ID);
            if (item != null)
            {
                context.zactests.Remove(item);
                context.SaveChanges();
            }
        }
        e.Handled = true;
    }

这是我后面更新的代码:-

protected void EntityServerModeDataSource1_Updating1(object sender, 
DevExpress.Data.Linq.LinqServerModeDataSourceEditEventArgs e)
    {
        int ID = (int)e.Keys[ASPxGridView1.KeyFieldName];
        using (overstayEntities1 context = new overstayEntities1())
        {
            var item = context.zactests.Find(ID);
            if (item != null)
            {
                item.VRMEditable = (string)e.Values["VRMeditable"];

                context.SaveChanges();

如果我能解决这个问题,那就太好了。否则,我将需要采取如此清晰的步骤。

就显示和删除数据而言,它非常迅速地工作,只是希望它在更新时出现语法问题。我正在使用DEVExpress aspxgridview来显示数据,但是当我问他们这个问题时,他们指出了这个方向,因为它更多的是EF问题

任何帮助将不胜感激-预先感谢

0 个答案:

没有答案