Как получить данные из БД в ядре C# net - PullRequest
0 голосов
/ 18 июня 2020

Я новичок в net основной среде, и мне нужно получить данные из моей базы данных (postge sql),

У меня есть данные в базе данных, но я должен получить его только в json, поэтому вначале я создаю класс модели с полем, таким же, как в db:

namespace crud.Models
{
    public class User: DbContext
    {
        public User(DbContextOptions<User> options): base(options) { }

        public int Id { get; set; }
        public string Firstname{ get; set; }
        public string Lastname { get; set; }
        public string City { get; set; }
        public string Phone{ get; set; }
    }
}

, после этого я создаю репозиторий (таким образом я создаю контроллеры db в java / spring):

namespace crud.Service
{
    public interface IUserRepository : IDisposable
    {
        User GetUserById(int id);
        User GetUserByCity(string city);
    }
}

и теперь я не знаю, что мне делать дальше, я пытаюсь реализовать этот интерфейс в сервисе следующим образом:

namespace crud.Service
{
    public class UserRepository : IUserRepository
    {

        public void Dispose()
        {
            throw new System.NotImplementedException();
        }

        public User GetUserByCity(string city)
        {
            throw new System.NotImplementedException();
        }

        public User GetUserById(int id)
        {
            throw new System.NotImplementedException();
        }
    }
}

но теперь я не знаю, что я должен пойти дальше, может ли кто-нибудь сказать мне, как должны выглядеть моя служба и контроллер?

ps: мое соединение с db:

        public void ConfigureServices(IServiceCollection services)
        {
            services.AddMvc();
            services.AddEntityFrameworkNpgsql().AddDbContext<User>(opt =>
                opt.UseNpgsql(Configuration.GetConnectionString("User")));

        }

  "ConnectionStrings":{
    "User" : "User ID=root; Password=postgres; Host=localhost; Port=5432; Database=postgres; Integrated Security=true, Pooling=true"
  },

Ответы [ 4 ]

0 голосов
/ 19 июня 2020

Во-первых, вы должны создать объект, которым в вашем случае является User.

public class User
{
    public int Id { get; set; }
    public string Firstname{ get; set; }
    public string Lastname { get; set; }
    public string City { get; set; }
    public string Phone{ get; set; }
}

Во-вторых, создайте DbContext

public class UserContext : DbContext 
{ 
    public UserContext(DbContextOptions<UserContext> options): base(options)
    {
    }

    public DbSet<User> Users { get; set; }
}

Затем добавьте UserContext в Startup. cs

services.AddEntityFrameworkNpgsql().AddDbContext<UserContext>(opt =>
                opt.UseNpgsql(Configuration.GetConnectionString("User")));

Наконец, вы должны ввести UserContext в UserRepository (используя внедрение зависимостей), и вы можете получить свои данные из своей базы данных с помощью этого UserRepository.

public class UserRepository : IUserRepository
{
    private readonly UserContext _context;

    public UserRepository(UserContext context)
    {
        _context = context;
    }

    public void Dispose()
    {
        throw new System.NotImplementedException();
    }

    public List<User> GetUserByCity(string city)
    {
        return _context.Users.Where(u => u.City == city).ToList();
    }

    public User GetUserById(int id)
    {
        return _context.Users.FirstOrDefault(u => u.id == id);
    }
}
0 голосов
/ 18 июня 2020
static void HasRows(SqlConnection connection)
{
    using (connection)
    {
        SqlCommand command = new SqlCommand(
          "SELECT CategoryID, CategoryName FROM Categories;",
          connection);
        connection.Open();

        SqlDataReader reader = command.ExecuteReader();

        if (reader.HasRows)
        {
            while (reader.Read())
            {
                Console.WriteLine("{0}\t{1}", reader.GetInt32(0),
                    reader.GetString(1));
            }
        }
        else
        {
            Console.WriteLine("No rows found.");
        }
        reader.Close();
    }
}
0 голосов
/ 19 июня 2020

Вам необходимо изучить шаблоны службы и репозитория для ASP. NET MVC -Core, потому что это два очень важных шаблона проектирования в приложениях. NET, которые взаимодействуют с данными. Репозиторий фактически будет взаимодействовать с вашей базой данных через Entity Framework Core (аналогично Hibernate). Ваш уровень обслуживания - это абстракция над вашим репозиторием. Если вы используете Entity Framework Core, ваш DbContext будет представлять ваше соединение с базой данных. Через свой DbContext вы будете взаимодействовать с объектами, которые являются POCO (Plain Ole C# Objects)

https://exceptionnotfound.net/the-repository-service-pattern-with-dependency-injection-and-asp-net-core/

Но здесь я возьму несколько свободы. Я предполагаю, что ваш DbContext называется MyDbContext и содержит сущность Users. Я кое-что упростил.

public class UserRepository : IUserRepository
{
    MyDbContext db = new MyDbContext();
    public void Dispose()
    {
        if(db != null) 
        { db.Dispose();}
    }

    public User GetUserByCity(string city)
    {
        return db.Users.Where(c => c.City.Equals(city).First();
    }


}
0 голосов
/ 18 июня 2020

Вам следует потратить некоторое время, чтобы изучить Entityframework, стать основным ORM (объектно-реляционным сопоставителем) для c# приложения https://docs.microsoft.com/en-us/ef/

...