使用asp.net控件操作数据有哪些数据访问选项?

时间:2014-07-30 04:38:42

标签: asp.net sql vb.net

关于SO的第一个问题!

我正在处理的是一个Webforms页面,它有很多ASP文本框,日期选择器和下拉列表。现在我使用ADO.net进行所有这些控制来进行CRUD操作。

我已经在这个项目中做了大量工作,但我无法想知道我是否能够以更简单或更有效的方式做到这一点。到目前为止,我一直在使用SqlDataReader类。

如果有人可以分解我可用的不同选项或指出一些好的信息,我会很感激。我知道这是一个非常广泛的话题。我很了解LINQtoSQL和EntityFramework。

所以我的问题是:ADO.net与LINQtoSQL或EntityFramework相比如何?

1 个答案:

答案 0 :(得分:1)

您应该阅读ADO.NET,Linq 2 SQL和Entity Framework的每个示例,并实现它们以了解每个示例的优缺点。一个简单的网络搜索应该给你样品。

Linq2Sql和EF将需要您编写非常SQL查询。一旦你初步掌握了这三件事,请在你的代码中遵循这个简单的模式:

  1. 定义数据访问接口。
  2. 让您的代码(ascx.cs和aspx.cs)与接口一起使用。
  3. 定义基于ADO.NET,Linq2Sql或EF的接口的具体实现。
  4. e.g。

    public interface IRepository
    {
     MyDto GetData(int id);
     // and so on
    }
    
    public class EntityFrameworkRepository : IRepository
    {
     public MyDto GetData(int id)
     {
      using (var db = new MyDbContext())
      {
       var myDtoEntity = db.MyDtoEntity.FirstOrDefault(m => m.Id == id);
    
       // extension method to transform DB objects into DTOs
       return myDtoEntity.ToMyDto(); 
      }
     }
    }
    
    // similarly you can do:
    
    public class Linq2SqlRepository : IRepository
    {
     // so on..
    }
    
    // now for all your aspx.cs pages: derive them from a base page, 
    // and in the base page
    // have a variable like this, so that all pages have access to this.
    
    public IRepository Repository {get; set;}
    
    // you can have static instances as well for one time initialization.
    
    // you can initialize the Repository with a particular concrete implementation
    // or inject it. (if you're well versed with Dependency Injection)
    

    使用上述方法,您的所有代码都将在界面上运行,如果您决定更改实现,则只需更改一个位置。