ASP.Net Core - 访问数据库的最佳实践?

时间:2017-07-18 07:30:28

标签: c# asp.net sql-server entity-framework

我是ASP.Net Core(但不是ASP.Net)的新手,我想知道访问现有SQL Server数据库的最佳方式是什么?

我已经阅读了一些PluralSight教程,但他们似乎都使用Code First方法。

Microsoft确实有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 Core。

我从未使用“常规”ASP.Net编写此类代码,并且想知道ASP.Net Core开发人员对这种编码方法的看法。

(顺便说一句,我对存储过程非常熟悉,我在内部应用程序中使用了很多,但只是在数据密集型操作中,或者当我不想要大型集合时我的SQL Server和ASP.Net代码之间传递的数据。我从来没有使用过存储过程,比如说,在表上做一个标准的标准SELECT。)

1 个答案:

答案 0 :(得分:-1)

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

a)ASP.NET中SP调用的通用方法
b)使用存储过程来避免SQL注入
c)在SQL存储过程中使用分页来提高性能(这取决于表中的数据量)