MVC без Entity Framework - PullRequest
       4

MVC без Entity Framework

0 голосов
/ 13 мая 2018

Из приведенных ниже учебных пособий:

Как мне выполнить приведенные выше примеры кода без Entity Framework, просто используя SQL-запросы?

Например, в приведенном выше исходном коде вместо

var v = dc.Events.Where(a => a.EventID == eventID).FirstOrDefault();  

if (v != null)
{
    dc.Events.Remove(v);
    dc.SaveChanges();
    status = true;
}

Я хочу сделать

DELETE FROM Even WHERE EventID = {0}

Ответы [ 2 ]

0 голосов
/ 14 мая 2018

Пара способов:

  1. с использованием необработанного запроса в Entity Framework:
  2. Открыть строку подключения через SqlConnection и выполнить:

код sudo для метода1:

string sqlDeleteStatement = "DELETE FROM Even WHERE EventID = @id";
List<SqlParameter> parameterList = new List<SqlParameter>();
parameterList.Add(new SqlParameter("@id", 1)); delete id = 1
_context.Database.SqlQuery(sqlDeleteStatement, parameterList);

код sudo для метода 2:

using(SqlConnection conn = new SqlConnection()) 
{
   conn.ConnectionString = "Server=[server_name];Database=[database_name];Trusted_Connection=true";
   string sqlDeleteStatement = "DELETE FROM Even WHERE EventID = @id";
   SqlCommand command = new SqlCommand(sqlDeleteStatement , conn);
   command.Parameters.Add(new SqlParameter("@id", 1)); //delete id = 1
   command.ExecuteNonQuery();
}
0 голосов
/ 14 мая 2018

FirstOrDefault() в LINQ эквивалентно LIMIT 1 в MySQL, поэтому функцию LINQ можно преобразовать в команды SQL с помощью IF или CASE WHEN следующим образом (предполагается, что команды выполняются внутри хранимой процедуры):

DELIMITER //

-- 'Events' is a DbSet name by common convention,
-- therefore table name should be 'Event'
CREATE PROCEDURE procedure_name (IN eventID INT)
BEGIN
    DECLARE v INT;
    SET v = SELECT EventID FROM Event WHERE EventID = eventID LIMIT 1;

    CASE WHEN v IS NOT NULL 
    THEN DELETE FROM Event WHERE EventID = v
    ELSE -- do something else
    END

    -- alternative:
    -- IF(v IS NOT NULL, DELETE FROM Event WHERE eventID = v, 0)

    -- other stuff here

END//
DELIMITER ;

Примечание: Если EventID является столбцом первичного ключа, вы можете удалить LIMIT 1, поскольку результат запроса возвращает только одно значение.

Затем используйте CALL procedure_name(eventID) или включите procedure_name в MySqlCommand, чтобы выполнить его.

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