private IEnumerable<Product> GetProductList()
 {
     var context = new MyEntities();
     var list = context.Products
                     .OrderBy(m => m.Id)
                     .ToList();
     return list;
 }
        private void UpdateProducts()
        {
            //EFと同じ接続文字列を使ってSqlConnectionを作成。
            using (var sqlConnection = new SqlConnection(new MyEntities().Database.Connection.ConnectionString)) {

                //作成済みのSqlConnectionを使ってDbContextを作成。
                using (var context = new MyEntities(sqlConnection)) {

                    //EntityConnectionのOpenメソッドを呼ぶ。
                    IDbConnection entityConnection = ((IObjectContextAdapter)context).ObjectContext.Connection;
                    entityConnection.Open();

                    //EntityConnectionに対してトランザクションを開始。
                    using (var tr = entityConnection.BeginTransaction()) {
                        try {
                            //Reflectionを使ってEntityTransactionからSqlTransactionを取得する。
                            var sqlTran = (SqlTransaction)tr.GetType().InvokeMember("StoreTransaction",
                                                            BindingFlags.FlattenHierarchy | BindingFlags.NonPublic | BindingFlags.InvokeMethod
                                                            | BindingFlags.Instance | BindingFlags.GetProperty | BindingFlags.NonPublic, null, tr, new object[0]);

                            //1. ADO.NETで独自のSQL文を実行。
                            var sql = "UPDATE [Products] SET [Price] = [Price] * 1.1 ";
                            var cmd = sqlConnection.CreateCommand();
                            cmd.Transaction = sqlTran;
                            cmd.CommandText = sql;
                            cmd.ExecuteNonQuery();

                            //2. DbContextでProductsを更新。
                            var product = context.Products
                                                .FirstOrDefault();
                            product.Price /= 1.1M;
                            context.SaveChanges();

                            tr.Commit();

                        }
                        catch (Exception) {
                            tr.Rollback();
                            throw;
                        }
                    }
                }
            }
        }