ASP .NET MVC 3 Модели + хранимые процедуры - PullRequest
5 голосов
/ 13 октября 2011

Я новичок в ASP MVC, и я не знаю, как создавать модели, основанные на хранимых процедурах из моей базы данных.У меня уже есть база данных, которая работает с другим приложением, и моя веб-страница должна использовать упомянутую базу данных.

Буду признателен, если кто-нибудь покажет мне какой-нибудь фрагмент кода, описывающий правильный способ, как это сделать.(если я не был уверен: мне нужно создать ASP .NET Models, которые используют хранимые процедуры из моей базы данных и ничего более)

txh заранее

Ответы [ 4 ]

6 голосов
/ 14 октября 2011

@ fgeorgiew вам просто нужно знать, как заполнить модель (класс) из хранимой процедуры? Вы можете использовать ORM, такой как NHibernate или Entity Framework, для обработки сантехники или просто использовать необработанный код ADO.NET, как в примере ниже. Обратите внимание, это просто грубый код, но вы поняли идею.

public class MyModel
{
    public int ModelId { get; set; }
    public string FirstName { get; set; }
}

public class SqlMyModelRespoitory : IMyModelRepository // optional for DI/IoC, assume interface with GetSingleModel method
{
    public MyModel GetSingleModel()
    {
        MyModel model;
        string connString = "server=10.1.1.1;database=MyDb;uid=me;pwd=hidden";
        using (SqlConnection conn = new SqlConnection(connString))
        {
            conn.Open();
            using (SqlCommand cmd = new SqlCommand())
            {
                cmd.Connection = conn;
                cmd.CommandType = System.Data.CommandType.StoredProcedure;
                cmd.CommandText = "p_GetMyModelFromDb";

                using (SqlDataReader reader = cmd.ExecuteReader())
                {
                    while (reader.Read())
                    {
                        model = new MyModel 
                        {
                           ModelId = Convert.ToInt32(reader[0]),
                           FirstName = reader[1].ToString()
                        };
                    }
                }
            }
        }
        return model;
    }
}
3 голосов
/ 13 октября 2011

Вы можете начать с некоторой абстракции, указывающей ваше намерение:

public interface IMyRepository
{
    SomeModel Get(int id);
}

, затем вы можете написать реализацию, которая будет использовать вашу хранимую процедуру:

public class MyRepositorySql: IMyRepository
{
    public SomeModel Get(int id)
    {
        ... call your stored procedure
    }
}

, затем спроектировать свой контроллер так, чтобыона принимает эту абстракцию в качестве аргумента:

public class MyController: Controller
{
    private readonly IMyRepository _repository;
    public MyController(IMyRepository repository)
    {
        _repository = repository;
    }

    public ActionResult Index(int id)
    {
        var model = _repository.Get(id);
        return View(model);
    }
}

Теперь все, что осталось, - это настроить вашу DI-инфраструктуру для передачи правильной реализации в конструктор контроллера.Как вы можете видеть, контроллер полностью отделен от способа извлечения данных.На самом деле не имеет значения, используете ли вы StoredProcs, какой-либо ORM или что-то еще на своем уровне доступа к данным.

1 голос
/ 20 августа 2014

Как вызвать хранимую процедуру в Asp.Net MVC

using System;
using System.Collections.Generic;
using System.IO;
using System.Data;
using System.Data.Entity;
using System.Net;
using System.Data.SqlClient;

public partial class StudentRecord
{
    public int Id { get; set; }
    public string Name { get; set; }
    public string Marks { get; set; }
    public string Grade { get; set; }
    public Nullable<System.DateTime> DOB { get; set; }
}

public class SqlMyModelRespoitory : First_Test_DBEntities 
{
    public StudentRecord GetSingleModel()
    {
        StudentRecord model;
        string connString = @"Paste Your Local Connection String";

        using (SqlConnection conn = new SqlConnection(connString))
        {
            conn.Open();

            using (SqlCommand cmd = new SqlCommand())
            {
                cmd.Connection = conn;
                cmd.CommandType = System.Data.CommandType.StoredProcedure;
                cmd.CommandText = "InsertStudent";

                using (SqlDataReader reader = cmd.ExecuteReader())
                {
                    while (reader.Read())
                    {
                        model = new StudentRecord
                        {
                            Id = Convert.ToInt32(reader[0]),
                            Name = reader[1].ToString(),
                            Marks = reader[1].ToString(),
                            Grade = reader[1].ToString(),
                            DOB = Convert.ToDateTime(reader[1])
                        };
                    }
                }
            }
        }
        return model;
    }
}
0 голосов
/ 13 октября 2011

Хорошо, допустим, у вас есть SP с именем Customers, который выбирает несколько столбцов, например:

ID
Имя
Адрес

Теперь вы создадите класс Model внутри вашей папки Model с именем «Customer.cs» и определите свойства, такие как:

public int ID { get; set; }
public string Name { get; set; }
public string Address { get; set; }

Это ваш класс МОДЕЛЬ.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...