将ASP.NET中的WebService Restful连接到数据库

时间:2019-02-06 12:14:22

标签: c# sql-server rest web-services asp.net-mvc-4

我是新来的,如果我不能很好地解释自己的话,对不起。  我有一个基本的asp.net RESTful API,它返回2个联系人,我从一个Android项目“使用它”,我的问题是我是否可以或如何将Web服务连接到另一台计算机上的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 :(得分:0)

您可以使用Dependency Injection,即,它通常与让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

答案 1 :(得分:0)

简短的回答,您可以通过任何方式(ADO.net或任何其他ORM)来完成。

在您的方案中,您可以应用依赖关系反转原理。

  

更高级别的模块不应依赖于更低级别的抽象

在您的情况下,使用者不应知道从何处提供数据。您所需要做的就是更改GetAllContacts以使用ORM从db读取数据。

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();        
    }
}