Подключите WebService Restful в asp.net к базе данных - PullRequest
0 голосов
/ 06 февраля 2019

Я новичок здесь, так что извините, если я не объясняю себя хорошо.У меня есть базовый API asp.net RESTful, который возвращает 2 контакта, я «использую его» из проекта Android, мой вопрос, могу ли я или как подключить веб-сервис к базе данных Microsoft SQL Server 2014, которую я имею на другом компьютере. Должен ли я установить соединение в ContactRepository как простое соединение или мне нужно сделать что-то другое? Я оставляю код ниже:

ContactRepository:

    namespace PruebaRestful.Services
{
    public class ContactRepository
    {
        public Contact[] GetAllContacts()
        {
            return new Contact[]
            {
            new Contact
            {
                Id = 1,
                Name = "Glenn Block"
            },
            new Contact
            {
                Id = 2,
                Name = "Dan Roth"
            }
            };
        }
    }
}

ContactController:

namespace PruebaRestful.Controllers
{
    public class ContactController : ApiController
    {
        private ContactRepository contactRepository;

        public ContactController()
        {
            this.contactRepository = new ContactRepository();
        }


        public Contact[] Get()
        {
            return contactRepository.GetAllContacts();        
        }
    }
}

Спасибо всем, и, пожалуйста, если мне нужно написать что-то еще, сообщите мне в комментарии.

Ответы [ 2 ]

0 голосов
/ 28 февраля 2019

Короткий ответ, вы можете сделать это любым способом (ADO.net или любым другим ORM).

В вашем сценарии вы можете применить принцип инверсии зависимостей.

Модуль более высокого уровня не должен зависеть от абстракций более низкого уровня

В вашем случае потребитель не должен знать, откуда поступают данные.Все, что вам нужно, это изменить GetAllContacts для чтения данных из БД с помощью ORM.

public class DbConnection: IConnection 
{
    // Code for managing DB Connection and data querying
}

public class ContactRepository: IContactRepository
{
    private IDbConnection _dbConnection;

    public ContactRepository(IConnection dbConnection)
    {
        _dbConnection= dbConnection;
    }

    public Contact[] GetAllContacts()
    {
         // Add code to read from DB here
    }
}

public class ContactController : ApiController
{
    private IContactRepository _contactRepository;

    public ContactController()
    {
        _contactRepository = <using any DI container resolve dependency with ContactRepository>;
    }


    public Contact[] Get()
    {
        return _contactRepository.GetAllContacts();        
    }
}
0 голосов
/ 06 февраля 2019

Вы можете использовать Внедрение зависимостей , т. Е. Обычно это так же просто, как заставить ContactController принять объект соединения в конструкторе.Обычно вы используете интерфейс IConnection, а не конкретный класс соединений, чтобы позволить вам макетировать его для тестирования.

namespace PruebaRestful.Services
{
    public class ContactRepository
    {
        private IConnection _connection;

        public ContactRepository(IConnection connection)
        {
            _connection = connection;
        }

        public Contact[] GetAllContacts()
        {
            return new Contact[]
            {
            new Contact
            {
                Id = 1,
                Name = "Glenn Block"
            },
            new Contact
            {
                Id = 2,
                Name = "Dan Roth"
            }
            };
        }
    }
}

Чтобы узнать больше о том, как это сделать в Asp.Net, см. https://docs.microsoft.com/en-us/aspnet/core/fundamentals/dependency-injection?view=aspnetcore-2.2

...