zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    android 3G移植【转】
    【转】小白级的CocoaPods安装和使用教程
    【转】Core Bluetooth框架之二:后台处理
    【转】Core Bluetooth框架之一:Central与Peripheral
    ios ble 参考
    拼音处理
    通过触发器实现数据库的即时同步
    数据库中存取文件
    交叉报表处理实例
    SQL Server 2005 中实现通用的异步触发器架构
  • 原文地址:https://www.cnblogs.com/lekko/p/3103374.html
Copyright © 2011-2022 走看看