• Entity Framework直接执行SQL语句


      一般来说linq在EF中满足了绝大部分的查询需求,而插入、删除则需要根据实体来操作,在一些情况下会造成一些麻烦。

    比如现在有这样的关系:

    它在数据库中生成的表:

      那么在实体对象上下文如果想直接操作某些Product与Category的关联时将麻烦不少,因为不能在EF下直接操作ProductCategory中间表。那么这时直接执行SQL语句来添加、删除两者之间关系会好上不少。我便是这样写的:

     1         /// <summary>
     2         /// 添加产品到小类
     3         /// </summary>
     4         /// <param name="proID">产品ID</param>
     5         /// <param name="catIDs">小类ID列表</param>
     6         public bool AddProductToCategory(int proID, IList<int> catIDs)
     7         {
     8             bool result = true;
     9             foreach (var catID in catIDs)
    10             {
    11                 try
    12                 {
    13                     string sql = "Insert Into [ProductCategory] Values (@proID,@catID)";
    14                     var args = new DbParameter[] { 
    15                                      new SqlParameter { ParameterName = "proID", Value = proID},
    16                                      new SqlParameter("catID",catID)
    17                                   };
    18                     _DataModelEntity.ExecuteStoreCommand(sql, args);
    19                 }
    20                 catch (System.Exception ex)
    21                 {
    22                     LogHelper.WriteLog(ex);
    23                     result = false;
    24                 }
    25             }
    26             return result;
    27         }
    28 
    29         /// <summary>
    30         /// 删除小类产品关系
    31         /// </summary>
    32         /// <param name="proID">产品ID</param>
    33         /// <param name="catIDs">小类ID</param>
    34         public bool DeleteProductToCategory(int proID,IEnumerable<int> catIDs)
    35         {
    36             bool result = true;
    37             foreach (var catID in catIDs)
    38             {
    39                 try
    40                 {
    41                     string sql = "Delete From [ProductCategory] Where [Product_ID] = @proID And [Category_ID] = @catID";
    42                     var args = new DbParameter[] { 
    43                                      new SqlParameter { ParameterName = "proID", Value = proID},
    44                                      new SqlParameter("catID",catID)
    45                                   };
    46                     _DataModelEntity.ExecuteStoreCommand(sql, args);
    47                 }
    48                 catch (System.Exception ex)
    49                 {
    50                     LogHelper.WriteLog(ex);
    51                     result = false;
    52                 }
    53             }
    54             return result;
    55         }
    执行SQL

      实际上已经有不少博文中提到了这些使用方法,这里我只是强调它的使用条件,大部分环境下,LINQ和EF的配合已经趋于完美了。

      转载请注明原址: http://www.cnblogs.com/lekko/archive/2013/05/28/3103374.html

  • 相关阅读:
    springcloud中常用的注解
    MySQL--Profiling和Trace使用
    MySQL Execution Plan--IN查询计划
    MySQL Config--参数system_time_zone和参数time_zone
    MySQL Replication--全局参数gtid_executed和gtid_purged
    MySQL Transaction--事务无法正常回滚导致的异常
    MySQL Execution Plan--数据排序操作
    MySQL Session--批量KILL会话
    MySQL Transaction--MySQL与SQL Server在可重复读事务隔离级别上的差异
    MySQL Transaction--事务相关查询
  • 原文地址:https://www.cnblogs.com/lekko/p/3103374.html
Copyright © 2020-2023  润新知