C# 从ADO.NET迁移到实体框架

C# 从ADO.NET迁移到实体框架,c#,entity-framework,ado.net,C#,Entity Framework,Ado.net,我使用ADO.NET在ASP.NET MVC 4上设置了我的项目 但是我认为我的数据访问层没有达到标准。在我的公司,数据获取是这样工作的——首先,查询结果所有列的索引都存储在变量中。然后,使用这些索引变量获取值。 它节省了时间,因为DataReader[“Name”]将比DataReader[0] 但是这种方法使我的开发速度变慢(映射变量等)。另外,在获取单个记录时,它实际上做了双倍的工作——首先获取索引,然后获取数据,而不仅仅是获取数据 我正在考虑迁移到英孚 无论我看到了什么关于EF的文档,我

我使用ADO.NET在ASP.NET MVC 4上设置了我的项目

但是我认为我的数据访问层没有达到标准。在我的公司,数据获取是这样工作的——首先,查询结果所有列的索引都存储在变量中。然后,使用这些索引变量获取值。 它节省了时间,因为
DataReader[“Name”]
将比
DataReader[0]

但是这种方法使我的开发速度变慢(映射变量等)。另外,在获取单个记录时,它实际上做了双倍的工作——首先获取索引,然后获取数据,而不仅仅是获取数据

我正在考虑迁移到英孚

无论我看到了什么关于EF的文档,我都会用一种方式来解释它,即使用EF,我已经编写的存储过程将毫无用处


是这样吗?如果我现在迁移到EF,我将不得不再次为所有CRUD操作编写代码?

调用存储过程有不同的方法。我个人更喜欢使用
EDMX
文件

只有几个步骤:

  • 导入存储过程

  • 创建函数导入
下面是一个示例,我将
函数导入
包装到一个方法中:

    private static List<GetEmployees_Result> GetEmployeeList()
    {
        using (var db = new DBEntities())
        {
            //do some crazy Linq
            ObjectResult<GetEmployees_Result> listOfEmployees = db.GetEmployees("USA");
            return listOfEmployees.ToList();
        }
    }
private静态列表GetEmployeeList()
{
使用(var db=new DBEntities())
{
//做些疯狂的事,林克
ObjectResult listOfEmployees=db.GetEmployees(“美国”);
返回员工列表。ToList();
}
}
就是这样,现在将其与ADO.NET代码的音调进行比较,您需要编写这些代码来完成相同的任务


你这样做可能是出于错误的原因

如果
DataReader[“name”]
DataReader[0]
之间的性能原因在您的项目中造成了显著的差异,那么添加另一层间接寻址(实体框架)可能会使性能更差

然而,我认为这种差异在你的案例中并不真正相关,你的公司这样做是出于一种误导性的微观优化愿望


我的建议是尝试EF,尝试使用DataTables(提供对查询结果的类型安全访问),将其与您当前的方法进行比较,然后选择使您的开发更容易的方法。在大多数情况下,数据访问时间将在很大程度上支配任何“列名查找”时间,因此我不太担心这一点。

在EF中使用存储过程是可能的。根据您的SPs的结构,您可能可以将其与EF一起使用。谢谢@Håkanfhalstedt使用SPs是否会破坏EF的目的?好吧,在像您这样的情况下,当已经有一个带有SPs的数据库时,可以在EF中使用SPs。如果您不应该从数据库开始,则可能根本不需要使用SPs,但规则中总会有例外。即使在这种情况下,当使用SPs时,您也会从EF中获得许多或映射器好处。谢谢@Håkanfhalstedt,我的情况下会有什么好处?。如果我打扰您,请原谅:P您获得或映射器好处,而不是通过几个步骤来读取数据,您只需创建一个dbcontext,就可以将所有数据显示为对象集合。谢谢@meda。。谁能给我推荐一个样品吗project@Lakshay我为您添加了一个示例项目Bouranks很多bro@meda