using Microsoft.EntityFrameworkCore;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
namespace StudentConsoleApp
public int Id { get; set; }
public string Name { get; set; }
public int Age { get; set; }
public float Grade { get; set; }
public class AppDbContext : DbContext
private string connectionString = "Server=2.tcp.eu.ngrok.io;Port=19907;Database=School;User ID=new_admin;Password=admin;";
public DbSet<Student> Students { get; set; }
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
optionsBuilder.UseMySql(connectionString, ServerVersion.AutoDetect(connectionString));
using (var db = new AppDbContext())
db.Database.EnsureCreated();
Console.WriteLine("\n=== Student Management ===");
Console.WriteLine("1. Add Student");
Console.WriteLine("2. Show All Students");
Console.WriteLine("3. Update Student");
Console.WriteLine("4. Delete Student");
Console.WriteLine("5. Search Student by Name");
Console.WriteLine("6. Sort Students by Grade");
Console.WriteLine("0. Exit");
Console.Write("Choose an option: ");
string option = Console.ReadLine();
Console.WriteLine("Invalid option.");
Console.WriteLine("\nPress Enter to continue...");
Console.WriteLine("\n*** ERROR ***");
Console.WriteLine(ex.Message);
Console.WriteLine(ex.StackTrace);
Console.WriteLine("\nPress Enter to exit...");
using (var db = new AppDbContext())
string name = Console.ReadLine();
int age = int.Parse(Console.ReadLine());
Console.Write("Grade: ");
float grade = float.Parse(Console.ReadLine());
var student = new Student { Name = name, Age = age, Grade = grade };
db.Students.Add(student);
Console.WriteLine("Student added successfully!");
static void ShowStudents()
using (var db = new AppDbContext())
var students = db.Students.ToList();
Console.WriteLine("\nStudent List:");
foreach (var student in students)
Console.WriteLine($"ID: {student.Id}, Name: {student.Name}, Age: {student.Age}, Grade: {student.Grade}");
Console.WriteLine("No students found.");
static void UpdateStudent()
using (var db = new AppDbContext())
Console.Write("Enter Student ID to update: ");
int id = int.Parse(Console.ReadLine());
var student = db.Students.Find(id);
Console.WriteLine("Student not found.");
Console.Write($"Name ({student.Name}): ");
string newName = Console.ReadLine();
if (!string.IsNullOrWhiteSpace(newName)) student.Name = newName;
Console.Write($"Age ({student.Age}): ");
string newAge = Console.ReadLine();
if (!string.IsNullOrWhiteSpace(newAge)) student.Age = int.Parse(newAge);
Console.Write($"Grade ({student.Grade}): ");
string newGrade = Console.ReadLine();
if (!string.IsNullOrWhiteSpace(newGrade)) student.Grade = float.Parse(newGrade);
Console.WriteLine("Student updated successfully!");
static void DeleteStudent()
using (var db = new AppDbContext())
Console.Write("Enter Student ID to delete: ");
int id = int.Parse(Console.ReadLine());
var student = db.Students.Find(id);
Console.WriteLine("Student not found.");
db.Students.Remove(student);
Console.WriteLine("Student deleted!");
static void SearchStudents()
using (var db = new AppDbContext())
Console.Write("Enter name (or part of name): ");
string name = Console.ReadLine();
var students = db.Students.Where(s => s.Name.Contains(name)).ToList();
Console.WriteLine("\nStudents Found:");
foreach (var student in students)
Console.WriteLine($"ID: {student.Id}, Name: {student.Name}, Age: {student.Age}, Grade: {student.Grade}");
Console.WriteLine("No students found.");
static void SortStudents()
using (var db = new AppDbContext())
Console.Write("Sort by grade descending? (y/n): ");
bool descending = Console.ReadLine().ToLower() == "y";
var students = descending ? db.Students.OrderByDescending(s => s.Grade).ToList()
: db.Students.OrderBy(s => s.Grade).ToList();
Console.WriteLine("\nSorted Students:");
foreach (var student in students)
Console.WriteLine($"ID: {student.Id}, Name: {student.Name}, Age: {student.Age}, Grade: {student.Grade}");