繁体   English   中英

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

[英]ASP.Net Core - best practice for accessing database?

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

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

Microsoft确实有一些示例代码显示了如何访问现有数据库。

我问这个问题的原因是我们公司雇用了一家外部公司为我们编写一些代码,而他们的解决方案是通过存储过程来进行所有数据库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和SQL Server之间传递大量数据时ASP.Net代码。而且我从来没有使用存储过程只是为了在表上执行标准的SELECT。)

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM