2017-07-18 58 views
1

我是新来ASP.Net核心(但不是ASP.Net),我想知道什么访问现有的SQL Server数据库的最佳途径?ASP.Net核心 - 访问数据库的最佳实践?

我跟着一些PluralSight教程,但他们似乎都使用Code First方法。

微软确实有some example code显示如何访问现有的数据库。

我问这个问题的原因是我们公司聘请了一家外部公司为我们编写一些代码,他们的解决方案是通过存储过程执行数据库CRUD操作的所有全部

所以,在SQL Server中,他们已经基本上在3个存储过程的每一个应用程序使用的表,例如:

dbo.CustomerGet 
dbo.CustomerDelete 
dbo.CustomerUpdate 

而且他们的ASP.Net核心代码只包含负载小功能,像这样:

public IEnumerable<Order> GetCustomerOrders(int customerID) 
{ 
    var itemsParams = new Dictionary<string, object>() 
    { 
     { "@CustomerID", customerID} 
    }; 
    var items = _dataAccess.GetData("dbo.CustomerOrdersGet", itemsParams, 
     reader => new Order() 
     { 
      OrderID = reader.GetInt32(0), 
      OrderName = reader.GetString(1), 
      // ...etc... 
     }); 
    return items; 
} 

GetData()功能只是创建到数据库的新连接,并调用存储过程:

public IEnumerable<T> GetData<T>(string storedProcedureName, Dictionary<string, object> parameters) 
{ 
    using (var conn = new SqlConnection(_connectionString)) 
    { 
     conn.Open(); 
     return conn.Query<T>(storedProcedureName, parameters, commandType: CommandType.StoredProcedure); 
    } 
} 

他们的代码在任何地方都没有提及DbContext

他们的一些SP也只能做一个SELECT,但他们只需要一个PageNumber和PageSize参数,为网页获取一页数据,再加上一个“SortBy”参数。

再一次,在“我的世界”中,通过可管理的数据大小,我总是一次加载所有数据,并让客户端在显示结果页面后处理并处理排序。

我知道StackOverflow并不是问“你的意见是什么......”的理想场所吗?输入问题,但我会很感激一些反馈。

一个真正的技术问题,这是其他开发商,特别是考虑到ASP.Net核心如何利用新的(和不断变化)是非常有用的。

我从来没有用“普通”ASP.Net编写这样的代码,并且想知道ASP.Net Core开发人员对这种编码方法的看法。 (顺便说一句,我对存储过程非常舒服,我在内部应用程序中使用它们很多,但只是在数据密集型操作中,或者当我不希望大数据集被传递时大约在我的SQL Server和ASP.Net代码之间,而且我从来没有使用过存储过程,例如,在一个表上执行一个bog标准的SELECT。)

+1

这与'ASP.NET Core'无关,我的意思是在其他使用其他框架和编程语言的应用程序中发生了同样的情况。 – Fabio

+1

无论哪种方式都是可行的。两者都有其优点和缺点。你说得对,SO *不是那个网站。 –

回答

-1

ASP.NET代码看起来很好,因为它们有创建了一个通用方法来调用存储过程并从SQL数据库中获取数据集。 他们只是调用相同的泛型方法来获取信息,然后在Reader的帮助下绑定结果集。而且,即使对Select语句使用存储过程也是一个很好的选择,因为如果您将在代码中直接编写Select Query,那么它可能会导致SQL注入,因此如果您在SQL Server级别使用存储过程并实现分页,将一次获取所有数据,然后显而易见,SP调用需要更多时间,然后将该数据保存在ASP.NET对象中,然后应用ASP.NET分页,这是不推荐的。所以其良好的有:

一)通用方法在ASP.NET SP呼叫
b)使用存储的特效,以避免SQL注入
c)利用在SQL存储的特效paginations以提高性能(这取决于卷上你在表格中有数据)