Как мне написать веб-API, который имеет дело с таблицами, которые связаны с внешним ключом в C #? - PullRequest
0 голосов
/ 17 февраля 2019

Я пытаюсь написать веб-API для ученического стола и уроков, которые ученик берет.Контроллеры работают нормально индивидуально.Я имею в виду методы get, post, put и delete.

Student Table имеет идентификатор в качестве первичного ключа, имя и курсы

Courses Table имеет идентификатор в качестве первичного ключа, идентификатор студента в видевнешний ключ и название курса

Типовые классы:

    public class Student
    {
        public int id { get; set; }
        public string name{ get; set; }
        public ICollection<Courses> Courses { get; set; } 
    }

    public class Courses
    {
        public int id { get; set; }
        public int studentid { get; set; }
        public string name{ get; set; }
    }

Проект, над которым я работаю, - это проект .net web api.Метод публикации, который я написал для студента, выглядит следующим образом:

        try
        {
            using (var connection = new SqlConnection(connectionString))
            {
                connection.Open();

                using (var cmd = new SqlCommand())
                {
                    cmd.CommandType = System.Data.CommandType.Text;
                    cmd.CommandText = "insert into student (name) " +
                        "values (@name)";

                    cmd.Connection = connection;
                    cmd.Parameters.AddWithValue("@name", student.name);

                    cmd.ExecuteNonQuery();
                }
            }
        }
        catch (SqlException ex)
        {

            Debug.WriteLine(ex.Message);
        }

Вот мой вопрос.Как мне написать свои методы с учетом внешнего ключа?Я не мог найти примеры кода.Все они для сущности ...

1 Ответ

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

Например, чтобы получить всех студентов и курсы, которые вы можете использовать:

[HttpGet]
public ActionResult<StudentViewModel> GetAllStudents()
{
        try
        {
            using (var connection = new SqlConnection(connectionString))
            {
                connection.Open();

                using (var cmd = new SqlCommand())
                {
                    cmd.CommandType = System.Data.CommandType.Text;
                    cmd.CommandText = "SELECT s.id, s.name, c.Name as courseName FROM Student s INNER JOIN Courses c on c.studentId = s.id";
                    cmd.Connection = connection;


                    SqlDataAdapter da = new SqlDataAdapter(cmd);

                    da.Fill(dataTable);
                    connection.Close();
                    da.Dispose();

                    //Fill result view model from dataTable which will contain all data which you want from DB. 
                }
            }
        }
        catch (SqlException ex)
        {
            //Log exception
        }
}

Но это только пример.В реальном мире гораздо лучше разделить логику между действиями в контроллере и бизнес-логикой для получения данных.А использование объектно-реляционного отображения (ORM), такого как EntityFramework, сэкономит много времени.И если вам нужно использовать пользовательский запрос, у вас будет возможность сделать это.

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