Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ionic-framework/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 新手ASP.NET MVC 5模型存储过程大量后端建议_C#_Asp.net Mvc_Asp.net Mvc 4_Razor - Fatal编程技术网

C# 新手ASP.NET MVC 5模型存储过程大量后端建议

C# 新手ASP.NET MVC 5模型存储过程大量后端建议,c#,asp.net-mvc,asp.net-mvc-4,razor,C#,Asp.net Mvc,Asp.net Mvc 4,Razor,我有一个企业应用程序,它在很大程度上依赖于存储过程来实现业务逻辑。我正在考虑将前端从Webforms重做为ASP.NETMVC,但我希望我不必为每个存储过程编写一个模型,因为有数百个存储过程。Get存储过程的参数通常与等效的set存储过程的参数不同,并且一个存储过程经常更新多个数据库表 所以我的问题是,在这种后端构建ASP.NET MVC应用程序的最佳实践是什么?实体框架是否适用于此?我当然希望我不必构建100个模型,每个存储过程一个或两个 我还研究了将PlainRazorWeb页面与webda

我有一个企业应用程序,它在很大程度上依赖于存储过程来实现业务逻辑。我正在考虑将前端从Webforms重做为ASP.NETMVC,但我希望我不必为每个存储过程编写一个模型,因为有数百个存储过程。Get存储过程的参数通常与等效的set存储过程的参数不同,并且一个存储过程经常更新多个数据库表

所以我的问题是,在这种后端构建ASP.NET MVC应用程序的最佳实践是什么?实体框架是否适用于此?我当然希望我不必构建100个模型,每个存储过程一个或两个

我还研究了将PlainRazorWeb页面与webdata的动态数据行模型结合使用,这可能更合适。但是我不能像KendoUI那样使用整洁的东西


提前感谢您的智慧。

实体框架将帮助您做到这一点。我建议先从数据库中编写代码。我不推荐使用MVC和Razor。我只想为业务逻辑构建一个库层,该层将利用存储过程和服务层进行通信。该层将只处理与客户端的通信,并将使用库获取或设置数据。对于客户端,我将使用纯HTML和JavaScript,并使用Ajax调用使用服务


如果您的公司有支持web套接字的服务器,我甚至会在服务层使用SignalR hubs而不是WebApi。

您不需要每个存储过程都有一个模型

这完全取决于你想做什么

当我使用存储过程将数据保存到数据库时,我会为每个要保存的值发送参数

从数据库中获取值时,我使用模型。您在这里使用的模型显然取决于您,如果您正在接收文件数据,那么您可以拥有FileModel、imageData、ImageModel等

例如:

为此,我使用管理器和服务类:

public void UpdateCustomerCredentials(long id, string firstName, string lastName, string email, string mobilePhoneNumber, int price, string notes, Guid? imageId = null)
{
    using (SqlConnection con = new SqlConnection(ConnectionString))
    {
        using (SqlCommand cmd = new SqlCommand("UpdateCustomer", con))
        {

            cmd.CommandType = CommandType.StoredProcedure;
            cmd.Parameters.Add(new SqlParameter("@Id", id));
            cmd.Parameters.Add(new SqlParameter("@FirstName", firstName));
            cmd.Parameters.Add(new SqlParameter("@LastName", lastName));
            cmd.Parameters.Add(new SqlParameter("@Email", email));
            cmd.Parameters.Add(new SqlParameter("@MobilePhoneNumber", mobilePhoneNumber));
            cmd.Parameters.Add(new SqlParameter("@ImageId", GetParamValue(imageId)));
            cmd.Parameters.Add(new SqlParameter("@Price", price));
            cmd.Parameters.Add(new SqlParameter("@Notes", notes));

            try
            {
                con.Open();

                cmd.ExecuteReader();

                con.Close();
            }
            catch (SqlException ex)
            {
                cmd.Dispose();
                throw ex;
            }

            finally
            {
                cmd.Dispose();
            }
        }
    }
}
使用客户模型获取数据:

    public List<Customer> GetAllCustomers()
    {
        List<Customer> customers;
        SqlDataReader sqlDataReader = null;

        using (SqlConnection con = new SqlConnection(ConnectionString))
        {
            using (SqlCommand cmd = new SqlCommand("GetAllCustomers", con))
            {
                cmd.CommandType = CommandType.StoredProcedure;
                try
                {
                    con.Open();

                    sqlDataReader = cmd.ExecuteReader();

                    customers = (from x in sqlDataReader.Cast<DbDataRecord>()
                                 select new Customer
                                 {
                                     Id = GetValue<long>("Id", x),
                                     ProfileImageId = GetValue<Guid?>("ImageId", x),
                                     ContentType = GetValue<string>("ContentType", x),
                                     FirstName = GetValue<string>("Name", x),
                                     LastName = GetValue<string>("LastName", x),
                                     Email = GetValue<string>("Email", x),
                                     PhoenNumber = GetValue<string>("MobilePhoneNumber",x)

                                 }).ToList();

                    sqlDataReader.Close();
                }

                catch (SqlException ex)
                {
                    if (sqlDataReader != null) sqlDataReader.Close();

                    cmd.Dispose();

                    throw ex;
                }

                finally
                {
                    if (sqlDataReader != null) sqlDataReader.Dispose();

                    cmd.Dispose();
                }

            }


        }

        return customers;
    }
我个人喜欢使用类库进行SQL调用。这可能超出你的问题,但这是个人偏好

就实体框架而言,我缺乏经验,但我认为实体框架+存储过程是个坏主意


希望这能给出一些清晰的答案,但看起来我必须建立模型。从某种意义上说,这可能不是一件坏事,但却是相当多的工作。正在考虑动态创建expando类,但不确定这是否可以节省我的工作。谢谢你的回答。如果没有其他人在一天结束前加入better,我会相信你的答案。很乐意帮助:。另外要注意的是,无论您如何选择这样做,它都会涉及大量的工作,如果这是最节省您工作的方式,也许不是,但我相信这是一种处理存储过程和MVCSo的好方式,从您的问题来看,听起来像是您在规划一个体系结构,但不清楚该应用程序的功能,当前架构是什么?架构或技术堆栈的要求是什么。你希望这次重写能达到什么目的?按小时计算,预算是多少?我知道,ASP.Net是ASP.Net-根据您当前在WebForms中处理数据的方式,您可以尝试使用WebForms中当前存在的任何db调用/基础设施,将MVC或网页作为前端。但是,如果您也在考虑重做现有的数据基础设施,那么DonO的答案是,他们要走服务层的路,不管是否使用EF。实际上,我有一个API,它大部分已经构建好了,我可以通过ajax调用访问它。如果没有MVC,我可能会使用razor,因为我可能还不能完全切断服务器端的连接线。和信号员一起玩可能很有趣,但对于我想做的90%的事情来说,这可能是过度杀戮了。我只需要找到一个好的UI包来支持主题化。你今天可以看看。如果不是太痛苦的话,在混合中也可能是好的。*角度…拼写不是我的强项