【问题标题】:MVC with no Entity Framework没有实体框架的 MVC
【发布时间】:2018-10-23 06:37:05
【问题描述】:

来自以下源教程:

如何在没有实体框架的情况下仅使用 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}

【问题讨论】:

  • 使用 ADO.NET 类,例如SqlConnection 等如果它是 MySQL,那么您将需要 MySQL 特定的库(例如 MySQLConnection 等),您可以从 MySQL 下载它们。如果你不知道如何使用它们,找一个教程,网上有很多免费的,你可以谷歌一下,几秒钟就可以找到一些。即使它们主要涵盖 SQL Server 库,但 MySQL 的基本思想是相同的,并且 MySQL 文档本身有具体示例。你研究过你的需求吗??

标签: mysql sql asp.net entity-framework


【解决方案1】:

LINQ 中的FirstOrDefault() 相当于 MySQL 中的LIMIT 1,因此可以像这样使用IFCASE WHEN 将LINQ 函数转换为SQL 命令(假设命令在存储过程中运行):

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) 或在MySqlCommand 中包含procedure_name 来执行它。

【讨论】:

    【解决方案2】:

    几种方法:

    1. 在实体框架中使用原始查询:
    2. 通过SqlConnection打开连接字符串并执行:

    方法一的sudo代码:

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

    方法2的sudo代码:

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

    【讨论】:

      猜你喜欢
      • 2011-12-06
      • 2019-04-15
      • 1970-01-01
      • 1970-01-01
      • 2011-10-05
      • 2014-01-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多