我是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问题
任何帮助将不胜感激-预先感谢