您的位置:首页 > 数据库

Entity Framework直接执行SQL语句

2013-06-10 12:32 330 查看
一般来说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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: